diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 58614fc..fc23df0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -14,7 +14,6 @@ jobs: fail-fast: false matrix: include: - - {name: Python 3.9, python: '3.9', os: ubuntu} - {name: Python 3.10, python: '3.10', os: ubuntu} - {name: Python 3.11, python: '3.11', os: ubuntu} - {name: Python 3.12, python: '3.12', os: ubuntu} diff --git a/pyproject.toml b/pyproject.toml index 1e9e889..4bcb6a3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "sped-extractor" dynamic = ["version"] description = "Extrai e interpreta os registros e os campos das tabelas dos manuais do SPED (Sistema Público de Escrituração Digital), para os módulos ECD, ECF, EFD Contribuições (PIS, COFINS) e EFD ICMS IPI." readme = {file = "README.rst", content-type = "text/x-rst"} -requires-python = ">=3.9" +requires-python = ">=3.10" license = {text = "MIT"} authors = [ @@ -18,7 +18,6 @@ classifiers = [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", @@ -32,6 +31,7 @@ dependencies = [ "click", "PyPDF2==1.27.12", # same PyPDF2 version as Odoo 16 for convenienc "xsdata-odoo", + "typing_extensions", ] [project.urls] diff --git a/spedextractor/build_csv.py b/spedextractor/build_csv.py index 1d12a85..b0d04bd 100644 --- a/spedextractor/build_csv.py +++ b/spedextractor/build_csv.py @@ -20,31 +20,41 @@ import csv import logging +import pathlib import re + from unidecode import unidecode import click from . import extract_tables -from .constants import MODULE_HEADER, MODULES, SPECS_PATH +from .constants import ( + MODULE_HEADER, + MODULES, + SPECS_PATH, + RawRows, + RegisterDict, + FieldDict, + BlockDict, +) logger = logging.getLogger(__name__) # logger.addHandler(logging.StreamHandler()) # logger.setLevel(logging.INFO) -def _get_mod_header(mod): +def _get_mod_header(mod: str) -> list[tuple[str, str]] | None: # Override this method if the hard code MODULE_HEADER is not wanted return MODULE_HEADER.get(mod) # used to sort csv files -def _atoi(text): +def _atoi(text: str) -> int | str: return int(text) if text.isdigit() else text # used to sort csv files -def natural_keys(file): +def natural_keys(file: pathlib.Path) -> list[int | str]: """ alist.sort(key=natural_keys) sorts in human order http://nedbatchelder.com/blog/200712/human_sorting.html @@ -52,7 +62,7 @@ def natural_keys(file): return [_atoi(c) for c in re.split(r"(\d+)", file.name)] -def get_raw_rows(mod, layout): +def get_raw_rows(mod: str, layout: int) -> RawRows: """Walk through ./specs/MODULE/LAYOUT/raw_camelot_csv/ and return a big dictionary of all the raw rows found in raw CSV files extracted by ./extract_tables.py, gathered by their page number : @@ -118,7 +128,7 @@ def get_raw_rows(mod, layout): return raw_rows -def clean_row(row): +def clean_row(row: list[str]) -> list[str]: """Clean row's content""" row = [str(x) for x in row] for index, cell in enumerate(row): @@ -127,8 +137,8 @@ def clean_row(row): # e.g. change "Entr." to "Entr" in fields table's headers if re.match(r"^[a-zA-Z]+\.$", clean_cell): clean_cell = clean_cell[:-1] - # e.g. change "N’" to "N" in column "Tipo" - if re.match(r"^[a-zA-Z]+\’$", clean_cell): + # e.g. change "N'" or "N'" (unicode U+2019) to "N" in column "Tipo" + if re.match(r"^[a-zA-Z]+['\u2019]$", clean_cell): clean_cell = clean_cell[:-1] row[index] = clean_cell @@ -139,13 +149,13 @@ def clean_row(row): # =========================== -def _is_register_code(code): +def _is_register_code(code: str | None) -> bool: if not code: return False return len(code) == 4 and code[1:3].isdigit() -def _map_register_row(mod, row): +def _map_register_row(mod: str, row: list[str]) -> RegisterDict | bool: """Extracts register's row information for each kind of module""" # TODO : Join rows content when they are from the same register's line but # splited in two because of page break. @@ -182,7 +192,9 @@ def _map_register_row(mod, row): } elif mod == "efd_icms_ipi": - if len(row[0]) == 1 and row[0] != "": + # Handle both simple format (6 cols) and complex format with Perfil A/B/C (11 cols) + # First 5 columns are consistent: block, desc, code, level, card + if len(row) >= 6 and len(row[0]) == 1 and row[0] != "": register = { "block": row[0], "code": row[2], @@ -202,28 +214,37 @@ def _map_register_row(mod, row): return register -def extract_registers_list(mod, layout, raw_rows=None): +def extract_registers_list( + mod: str, layout: int, raw_rows: RawRows | None = None +) -> list[RegisterDict]: """Scans the raw csv rows and return 'registers', a list of dictionaries giving all the information about the module's registers (block, code, description, hierarchy level and card) found in the block's registers lists.""" - registers = [] + registers: list[RegisterDict] = [] in_block = False if not raw_rows: raw_rows = get_raw_rows(mod, layout) for page in raw_rows: for row in raw_rows[page]: + # Check if any cell contains the header keywords (handles merged cells) + has_bloco = ( + any("BLOCO" in cell for cell in row) + or any("Bloco" in cell for cell in row) + or any("Registro" in cell for cell in row) + ) + has_nivel = ( + any("NÍVEL" in cell for cell in row) + or any("Nível" in cell for cell in row) + or any(r"N\xc3\xadvel" in cell for cell in row) + ) + has_nome_registro = any("Nome do Registro" in cell for cell in row) + has_reg = any("Reg." in cell for cell in row) + has_bloco_desc = any("BLOCO DESCRIÇÃO" in cell for cell in row) # ecf + if ( - ("BLOCO" in row or "Bloco" in row or "Registro" in row) - and ( - "NÍVEL" in row - or "Nível" in row - or r"N\xc3\xadvel" in row - or "Nome do Registro" in row - or "Reg." in row - ) - or "BLOCO DESCRIÇÃO" in row # ecf - ): # ecd + has_bloco and (has_nivel or has_nome_registro or has_reg) + ) or has_bloco_desc: in_block = True continue if in_block: @@ -243,35 +264,47 @@ def extract_registers_list(mod, layout, raw_rows=None): # ============================ -def _is_joined_index(row, c): +def _is_joined_index(row: list[str], c: int) -> bool: """Checks if row's column 'c' start with row's index and need to be split""" if len(row) > 4 and row[c][0:1].isdigit() and len(row[c]) > 3 and " " in row[c]: return True return False -def _split_code_desc(row, c): +def _split_code_desc(row: list[str], c: int) -> tuple[str, str] | None: """Checks if row's column 'c' is a joined code and description and return 2 split items to be used if true""" i_end = 0 - code = [] - desc = [] for i, part_cell in enumerate(row[c].split(" ")): if not re.match(r"\b[A-Z_ÇÃÕÍÚe0-9]+\b", part_cell): i_end = i break if i_end != 0: split = row[c].split(" ") - code = " ".join(split[:i_end]) - desc = " ".join(split[i_end:]) - return code, desc + code_str = " ".join(split[:i_end]) + desc_str = " ".join(split[i_end:]) + return code_str, desc_str else: return None -def _format_row(row): +def _format_row(row: list[str]) -> list[str]: """Separates columns joined together""" + # Handle layout 20 merged header "Nº Campo" -> split into "Nº", "Campo" + # Check if first column contains "Nº" and "Campo" merged (e.g., "01 REG" or "Nº Campo") + if row and "Nº" in row[0] and "Campo" in row[0] and len(row) <= 6: + # This is a layout 20 row with merged Nº and Campo + # Split "Nº Campo" or "01 REG" into separate columns + parts = row[0].split(" ", 1) # Split on double space first + if len(parts) == 2: + row = [parts[0], parts[1]] + row[1:] + else: + # Try single space split + parts = row[0].split(" ", 1) + if len(parts) == 2: + row = [parts[0], parts[1]] + row[1:] + # change ["04 VL_BC_RET", ""] into ["04","VL_BC_RET"] if _is_joined_index(row, 0) and row[1] == "": split = row[0].split(" ") @@ -303,13 +336,17 @@ def _format_row(row): return row -def _map_row_mod_header(row, mod): +def _map_row_mod_header(row: list[str], mod: str) -> list[str]: """Inserts empty column when needed to align with module's header columns order""" len_header = len(_get_mod_header(mod)) if row and mod == "efd_icms_ipi": if len(row) == len_header - 1: # i.e. row has the columns 'Entr' and 'Saída' but not 'Obrig' row.insert(6, "") + elif len(row) == 6: + # Layout 20 format: Nº, Campo, Desc, Tipo, Tam, Dec (no Obrig, Entr, Saídas) + # Insert empty placeholders for Obrig, Entr, Saídas at positions 6, 7, 8 + row.extend(["", "", ""]) # Add empty cells in row if incomplete if row and len(row) < len_header: extension = [""] * (len_header - len(row)) @@ -318,13 +355,15 @@ def _map_row_mod_header(row, mod): return row -def _is_reg_row(row): +def _is_reg_row(row: list[str]) -> bool: if "REG" in row[1] and "Texto" in row[2]: return True return False -def _apply_camelot_patch(mod, layout, register, row): +def _apply_camelot_patch( + mod: str, layout: int, register: str, row: list[str] +) -> list[str]: """Catches patched row in ./camelot_patch/ and return override current row""" patch_file = SPECS_PATH / mod / str(layout) / "camelot_patch" / "camelot_patch.csv" @@ -344,6 +383,45 @@ def _apply_camelot_patch(mod, layout, register, row): return row +def _get_missing_field_patches( + mod: str, layout: int, register: str, start_idx: int, end_idx: int +) -> list[list[str]]: + """ + Get patch rows for missing field indices in the given range. + Returns a list of patch rows sorted by field index. + + Patch file format: Register,Page,Nº,Campo,Descrição,Tipo,Tam,Dec,Obrig,Entr,Saídas,... + Where Nº is the field index. + """ + patch_file = SPECS_PATH / mod / str(layout) / "camelot_patch" / "camelot_patch.csv" + missing_patches: list[list[str]] = [] + + try: + with open(patch_file, "r") as patch_csv: + patch_rows = csv.reader(patch_csv, delimiter=",", quotechar='"') + for patch_row in patch_rows: + # Skip empty rows or comments + if not patch_row or not patch_row[0] or patch_row[0].startswith("#"): + continue + + # Check if this patch is for the right register and missing index + if patch_row[0] == register and patch_row[2].isdigit(): + field_idx = int(patch_row[2]) + if start_idx <= field_idx < end_idx: + # patch_row[2:] contains: Nº,Campo,Descrição,Tipo,Tam,Dec,Obrig,Entr,Saídas,... + # We need to strip the Register and Page columns to get just the field data + missing_patches.append(patch_row[2:]) + logger.warning( + f" [{mod.upper()}] PATCH INSERT: Field {field_idx} ({patch_row[3]}) for register {register}" + ) + except FileNotFoundError: + pass + + # Sort by field index (first element of each patch row) + missing_patches.sort(key=lambda x: int(x[0]) if x[0].isdigit() else 0) + return missing_patches + + # def _is_field_row(row, last_field_index=0): # last_field_index is effectively unused for sequence check # # """Returns True if the row match a series of condition to be a register's field""" @@ -360,32 +438,77 @@ def _apply_camelot_patch(mod, layout, register, row): # return False -def _is_field_row(row, last_field_index): - """Returns True if the row match a series of condition to be a register's field""" +def _is_field_row( + row: list[str], + last_field_index: int, + mod: str, + register_name: str = "", + page: int = 0, +) -> tuple[bool, dict | None]: + """Returns True if the row match a series of condition to be a register's field. + Allows gaps up to 2 missing fields (e.g., 15 -> 17 or 15 -> 18) to handle PDF errors. + + Returns: + tuple: (is_valid_field, gap_info) + - is_valid_field: True if this is a valid field row + - gap_info: dict with 'start' and 'end' indices if there's a gap, None otherwise + """ + # Check basic field code validity if ( row[1] != "" and len(row[1]) < 32 and len(row[1]) > 1 and not row[1][0].isdigit() and "RZ_CONT" not in row[1] # in ECD, doesn't look like a real data field - and ( - row[0].isdigit() - and row[1] != "REG" - and int(row[0]) == last_field_index + 1 - or row[0] == "*" - ) ): - return True - else: - return False - - -def extract_register_fields(mod, layout, register_name, raw_rows=None, patch=True): + # Handle special case: "*" index + if row[0] == "*": + return True, None + + # Check if it's a valid field row with numeric index + if row[0].isdigit() and row[1] != "REG": + field_index = int(row[0]) + gap = field_index - last_field_index + + # Consecutive field (gap = 1) + if gap == 1: + return True, None + # Allow gaps of 1 or 2 missing fields (gap = 2 or 3) only for efd_icms_ipi + # where PDF extraction genuinely misses fields. Other modules use strict + # consecutive checking to avoid picking up neighboring register tables. + max_gap = 3 if mod == "efd_icms_ipi" else 1 + if 2 <= gap <= max_gap: + context = ( + f" [Register: {register_name}, Page: {page}]" + if register_name + else "" + ) + module_tag = f"[{register_name.upper()}] " if register_name else "" + logger.warning( + f" {module_tag}GAP DETECTED:{context} Field {field_index} follows {last_field_index} " + f"(gap of {gap - 1} missing field(s)). Accepting but PDF may have errors." + ) + gap_info = {"start": last_field_index + 1, "end": field_index} + return True, gap_info + # Gap too large - likely wrong table + elif gap > max_gap: + return False, None + + return False, None + + +def extract_register_fields( + mod: str, + layout: int, + register_name: str, + raw_rows: RawRows | None = None, + patch: bool = True, +) -> list[list[str]]: """Scans the raw_rows to find the rows describing the fields of a given register.""" in_register = False last_field_index = 1 - reg_fields = [] + reg_fields: list[list[str]] = [] if not raw_rows: raw_rows = get_raw_rows(mod, layout) @@ -422,8 +545,38 @@ def extract_register_fields(mod, layout, register_name, raw_rows=None, patch=Tru # TODO : handle instances where the field's row is split in two by a # page break. (=all the fields are empty except Description - 3rd # column). Example : EFD PIS COFINS page 78 Registro 0200 - if _is_field_row(row, last_field_index): - last_field_index = int(row[0]) + is_field, gap_info = _is_field_row( + row, last_field_index, mod, register_name, page + ) + if is_field: + current_field_idx = int(row[0]) + + # Check if there's a gap and try to fill it with patches + if gap_info and patch: + missing_start = last_field_index + 1 + missing_end = current_field_idx + missing_patches = _get_missing_field_patches( + mod, layout, register_name, missing_start, missing_end + ) + + patch_count = len(missing_patches) + logger.warning( + f" [{mod.upper()}] PATCHES APPLIED: Inserted {patch_count} field(s) from patch file for register {register_name}" + ) + + for patch_row in missing_patches: + # Apply the patch + patched_field_idx = int(patch_row[0]) + logger.warning( + f" [{mod.upper()}] -> Field {patched_field_idx} ({patch_row[1]})" + ) + + # Add register's name and page columns + patch_row_copy = [register_name, page] + patch_row + reg_fields.append(patch_row_copy) + last_field_index = patched_field_idx + + last_field_index = current_field_idx # Add register's name and page columns row.insert(0, page) @@ -438,15 +591,19 @@ def extract_register_fields(mod, layout, register_name, raw_rows=None, patch=Tru def build_accurate_fields_csv( - mod, layout, raw_rows=None, extracted_registers=None, patch=True -): + mod: str, + layout: int, + raw_rows: RawRows | None = None, + extracted_registers: list[RegisterDict] | None = None, + patch: bool = True, +) -> None: """Build a CSV file with the module's fields rows as they appear in the original pdf. If the registers list is passed as an argument, it avoids to make the extraction another time.""" accurate_file = SPECS_PATH / mod / str(layout) / "accurate_fields.csv" - reg_with_no_field = [] + reg_with_no_field: list[str] = [] if not extracted_registers: extracted_registers = extract_registers_list(mod, layout, raw_rows) @@ -472,13 +629,17 @@ def build_accurate_fields_csv( f"catched by camelot : {reg_with_no_field}" ) - with open(accurate_file, "w") as accurate_csv: + with open(accurate_file, "w", newline="") as accurate_csv: # Delete actual fields_file's datas before writing accurate_csv.seek(0) accurate_csv.truncate() accurate_rows = csv.writer( - accurate_csv, delimiter=",", quotechar='"', quoting=csv.QUOTE_ALL + accurate_csv, + delimiter=",", + quotechar='"', + quoting=csv.QUOTE_ALL, + lineterminator="\n", ) # Write module's header mod_header = ["Register", "Page"] + [c[0] for c in _get_mod_header(mod)] @@ -492,7 +653,7 @@ def build_accurate_fields_csv( # =================================== -def _normalize_field_code(code): +def _normalize_field_code(code: str) -> str: """ The pdf SPED specification has plenty of typing errors. We fix them here. This method can be completed in an incremental form: logging warnings @@ -517,7 +678,7 @@ def _normalize_field_code(code): return new_code.upper() -def _convert_field_type(field): +def _convert_field_type(field: FieldDict) -> FieldDict: """Return a string giving the 'interpreted' field's type : 'char', 'int', 'float' or 'date'.""" spec_type = field.get("spec_type") @@ -563,7 +724,7 @@ def _convert_field_type(field): return field -def _convert_field_required(field): +def _convert_field_required(field: FieldDict) -> FieldDict: """Return field with additional required boolean keys if necessary""" spec_required = field.get("spec_required") if spec_required in ["O", "S", "Sim", "Sm", "sim"]: @@ -583,6 +744,78 @@ def _convert_field_required(field): return field +def _convert_field_in_out(field: FieldDict) -> FieldDict: + # TODO : interpret field["spec_in"] when it is an integer + # (cf register C170 in EFD_ICMS_IPI page 71) + spec_in = field.get("spec_in") + if spec_in == "O": + field["in_required"] = True + elif spec_in == "OC": + field["conditional_in_required"] = True + + spec_out = field.get("spec_out") + if spec_out == "O": + field["out_required"] = True + elif spec_out == "OC": + field["conditional_out_required"] = True + return field + + +def _convert_values(field: FieldDict) -> FieldDict: + """Add a 'values' keys if field["spec_values"] can be interpreted as a list of items""" + values = field.get("spec_values") + if values: + # Remove unnecessary quotes + values = field["spec_values"].replace(""", "").replace(""", "").replace('"', "") + if values[0] == "[" and values[-1] == "]": + values = values[1:-1] + if "," in values: + values = values.split(",") + elif ";" in values: + values = values.split(";") + if isinstance(values, list): + field["values"] = [v.replace(" ", "").replace("''", "") for v in values] + if field.get("spec_type") and field["spec_type"] == "NS": + field["values"] = ["+", "-"] # cf. ECF pdf page 26 + # TODO : There is still around 30 fields with "spec_values" which is not easily + # convertible into a list + return field + + +def _convert_rules(field: FieldDict) -> FieldDict: + """Convert rules string in a iterable list""" + rules = field.get("rules") + if rules: + field["rules"] = rules[:-1].replace(" ", "").replace("[", "").split("]") + return field + + +def _map_field_row(row: list[str], mod: str) -> FieldDict: + """Return a field dictionary with interpreted information""" + field: FieldDict = {} + mod_keys = [c[1] for c in _get_mod_header(mod)] + + # Catch raw datas from row + field["register"] = row[0] + for index, key in enumerate(mod_keys): + if index + 2 < len(row) and row[index + 2] not in ["-", ""]: + field[key] = row[index + 2] + + # Interpret raw datas + field["index"] = int( + field.get("index", "0").replace("*", "0") + ) # TODO check * cases + field["code"] = _normalize_field_code(field["code"]) + + field = _convert_field_type(field) + field = _convert_field_required(field) + field = _convert_field_in_out(field) + field = _convert_values(field) + field = _convert_rules(field) + + return field + + def _convert_field_in_out(field): # TODO : interpret field["spec_in"] when it is an integer # (cf register C170 in EFD_ICMS_IPI page 71) @@ -655,7 +888,7 @@ def _map_field_row(row, mod): return field -def get_fields(mod, layout, with_reg=False): +def get_fields(mod: str, layout: int, with_reg: bool = False) -> list[FieldDict]: """Returns a list of the module's fields recorded as dictionaries with interpreted values. @@ -676,7 +909,7 @@ def get_fields(mod, layout, with_reg=False): f"'{mod}' is not a valid module name. Choose between {MODULES.keys()}" ) accurate_file = SPECS_PATH / mod / str(layout) / "accurate_fields.csv" - fields = [] + fields: list[FieldDict] = [] # Build MODULE_accurate_fields.csv if empty or not existing if not accurate_file.exists() or accurate_file.stat().st_size == 0: @@ -696,7 +929,12 @@ def get_fields(mod, layout, with_reg=False): return fields -def get_registers(mod, layout, raw_rows=None, extracted_registers=None): +def get_registers( + mod: str, + layout: int, + raw_rows: RawRows | None = None, + extracted_registers: list[RegisterDict] | None = None, +) -> list[RegisterDict]: """Add the `required` and `field_in_out` attributes (calculated from the MODULE_accurate_fields.csv file) to the registers extracted by `extract_registers_list()` and return this registers list. @@ -749,7 +987,7 @@ def get_registers(mod, layout, raw_rows=None, extracted_registers=None): # ====================================================== -def _sort_header_order(key): +def _sort_header_order(key: str) -> int: """Reorder hearder's keys""" header_base = [ "register", @@ -775,72 +1013,102 @@ def _sort_header_order(key): return 50 -def _get_usable_csv_header(fields): +def _get_usable_csv_header(fields: list[FieldDict], mod: str) -> list[str]: """Return a list of all the different keys available in fields""" - header = [] + header: list[str] = [] for field in fields: for key in field.keys(): if key not in header: header.append(key) + + # Only add these columns for efd_icms_ipi which has spec_in and spec_out + # This ensures consistent CSV structure for layout 20 where obrigatoriedade + # data may be in register tables instead of field tables + if mod == "efd_icms_ipi": + standard_columns = [ + "required", + "in_required", + "out_required", + "conditional_required", + "conditional_in_required", + "conditional_out_required", + ] + for col in standard_columns: + if col not in header: + header.append(col) + header.sort(key=_sort_header_order) return header -def build_usable_fields_csv(mod, layout): +def build_usable_fields_csv(mod: str, layout: int) -> None: fields_file = SPECS_PATH / mod / str(layout) / "fields.csv" fields = get_fields(mod, layout) logger.info(f"> Building {mod} {layout} fields.csv") # Open the CSV with the accurate fields list - with open(fields_file, "w") as f_file: + with open(fields_file, "w", newline="") as f_file: # Delete actual usable_file's datas before writing f_file.seek(0) f_file.truncate() fields_csv = csv.writer( - f_file, delimiter=",", quotechar='"', quoting=csv.QUOTE_ALL + f_file, + delimiter=",", + quotechar='"', + quoting=csv.QUOTE_ALL, + lineterminator="\n", ) - header = _get_usable_csv_header(fields) + header = _get_usable_csv_header(fields, mod) fields_csv.writerow(header) for field in fields: - row = [] + row: list[str | list[str]] = [] # Add missing keys with empty values to field for col in header: if col not in field.keys(): - field[col] = "" - row.append(field[col]) + field[col] = "" # type: ignore[literal-required] + row.append(field[col]) # type: ignore[misc] fields_csv.writerow(row) -def build_registers_csv(mod, layout, raw_rows=None, extracted_registers=None): +def build_registers_csv( + mod: str, + layout: int, + raw_rows: RawRows | None = None, + extracted_registers: list[RegisterDict] | None = None, +) -> None: """Generate a csv with the Registers specifications. One line for each register. If no registers argument is passed, the registers list extraction will be made by `get_registers`. """ registers_file = SPECS_PATH / mod / str(layout) / "registers.csv" registers = get_registers(mod, layout, raw_rows, extracted_registers) - header = _get_usable_csv_header(registers) + header = _get_usable_csv_header(registers, mod) # type: ignore[arg-type] logger.info(f"> Building {mod}_registers.csv") - with open(registers_file, "w") as reg_file: + with open(registers_file, "w", newline="") as reg_file: # Delete actual reg_file's datas before writing reg_file.seek(0) reg_file.truncate() reg_csv = csv.writer( - reg_file, delimiter=",", quotechar='"', quoting=csv.QUOTE_ALL + reg_file, + delimiter=",", + quotechar='"', + quoting=csv.QUOTE_ALL, + lineterminator="\n", ) # First line is columns titles reg_csv.writerow(header) for register in registers: - row = [] + row: list[str | list[str]] = [] # Add missing keys with empty values to field for col in header: if col not in register.keys(): - register[col] = "" - row.append(register[col]) + register[col] = "" # type: ignore[literal-required] + row.append(register[col]) # type: ignore[misc] reg_csv.writerow(row) @@ -848,9 +1116,11 @@ def build_registers_csv(mod, layout, raw_rows=None, extracted_registers=None): # ====================================================== -def extract_blocks(mod, layout, raw_rows=None): +def extract_blocks( + mod: str, layout: int, raw_rows: RawRows | None = None +) -> list[list[str]]: """Return a list of the module's blocks rows as found in path_raw""" - extracted_blocks = [] + extracted_blocks: list[list[str]] = [] in_block_list = False if not raw_rows: @@ -874,19 +1144,25 @@ def extract_blocks(mod, layout, raw_rows=None): return [] -def get_blocks(mod, layout, raw_rows=None, extracted_blocks=None): +def get_blocks( + mod: str, + layout: int, + raw_rows: RawRows | None = None, + extracted_blocks: list[list[str]] | None = None, +) -> list[BlockDict]: """Return a list of dictionaries representing module's blocks.""" if mod not in MODULES: raise ValueError( f"'{mod}' is not a valid module name. Choose between {MODULES.keys()}" ) - blocks = [] + blocks: list[BlockDict] = [] if not extracted_blocks: extracted_blocks = extract_blocks(mod, layout, raw_rows) for row in extracted_blocks: - block = {} - block["code"] = row[0].replace("*", "") - block["desc"] = " ".join(row[1].split()) + block: BlockDict = { + "code": row[0].replace("*", ""), + "desc": " ".join(row[1].split()), + } if len(row) == 3: # in ECF block["info"] = row[2] blocks.append(block) @@ -905,7 +1181,12 @@ def get_blocks(mod, layout, raw_rows=None, extracted_blocks=None): "'..specs/MODULE/LAYOUT/camelot_patch/'", show_default=True, ) -def main(patch): +@click.option( + "--mod", + type=click.Choice(list(MODULES.keys())), + help="Build CSV files for a specific module only.", +) +def main(patch: bool, mod: str | None) -> None: """Build 3 CSV files for each SPED modules (ECD, ECF, EFD_ICMS_IPI and EFD_PIS_COFINS) : @@ -917,7 +1198,8 @@ def main(patch): - MODULE_fields.csv : list all the module's registers fields with unified and 'usable' interpreted values (useful to create python objects from these fields).""" - for mod in MODULES: + modules_to_build = [mod] if mod else list(MODULES.keys()) + for mod in modules_to_build: logger.info(f"\n==== Building CSV files for {mod.upper()} ====") layout = MODULES[mod][0] diff --git a/spedextractor/constants.py b/spedextractor/constants.py index 6bfce47..98ca41b 100644 --- a/spedextractor/constants.py +++ b/spedextractor/constants.py @@ -1,15 +1,26 @@ import pathlib import logging -from typing import Tuple, List, Dict +from typing import TypedDict, Tuple, List, Dict + +try: + from typing import NotRequired +except ImportError: + from typing_extensions import NotRequired logger = logging.getLogger(__name__) SPECS_PATH: pathlib.Path = pathlib.Path(__file__).parent.resolve() / "specs" -MODULES: dict[str, tuple] = { +ModuleInfo = tuple[int, str, str] + +MODULES: dict[str, ModuleInfo] = { "ecd": (9, "2024-11-01", "http://sped.rfb.gov.br/arquivo/download/7300"), "ecf": (10, "2025-05-02", "http://sped.rfb.gov.br/arquivo/download/7625"), - "efd_icms_ipi": (19, "2024-11-28", "http://sped.rfb.gov.br/arquivo/download/7607"), + "efd_icms_ipi": ( + 20, + "2025-07-07", + "http://sped.rfb.gov.br/estatico/A7/5FB73968C31ABA91EA180EC5CFDB714293F604/NT-2025.001%20v1.0.pdf", + ), "efd_pis_cofins": (6, "2021-06-18", "http://sped.rfb.gov.br/arquivo/download/5836"), } @@ -56,3 +67,58 @@ ("Obrig", "spec_required"), ], } + + +class RegisterDict(TypedDict): + block: str + code: str + desc: str + level: int + card: str + required: NotRequired[bool] + conditional_required: NotRequired[bool] + in_required: NotRequired[bool] + out_required: NotRequired[bool] + conditional_in_required: NotRequired[bool] + conditional_out_required: NotRequired[bool] + spec_required: NotRequired[str] + spec_in: NotRequired[str] + spec_out: NotRequired[str] + parent: NotRequired["RegisterDict"] + o2m_parent: NotRequired["RegisterDict"] + children_o2m: NotRequired[list["RegisterDict"]] + children_m2o: NotRequired[list["RegisterDict"]] + short_desc: NotRequired[str] + + +class FieldDict(TypedDict): + register: str + index: int + code: str + desc: NotRequired[str] + type: NotRequired[str] + xsd_type: NotRequired[str] + required: NotRequired[bool] + conditional_required: NotRequired[bool] + in_required: NotRequired[bool] + out_required: NotRequired[bool] + conditional_in_required: NotRequired[bool] + conditional_out_required: NotRequired[bool] + length: NotRequired[str] + decimal: NotRequired[str] + spec_type: NotRequired[str] + spec_required: NotRequired[str] + spec_in: NotRequired[str] + spec_out: NotRequired[str] + spec_values: NotRequired[str] + values: NotRequired[list[str]] + rules: NotRequired[list[str]] + + +class BlockDict(TypedDict): + code: str + desc: str + info: NotRequired[str] + + +RawRows = dict[int, list[list[str]]] diff --git a/spedextractor/download.py b/spedextractor/download.py index c43903f..c90755d 100644 --- a/spedextractor/download.py +++ b/spedextractor/download.py @@ -69,7 +69,7 @@ def download_mod_pdf(mod_name: str) -> bool: required=False, help="Specific SPED module to download. If not provided, all modules will be downloaded.", ) -def main(target_module_str: Optional[str]): +def main(target_module_str: Optional[str]) -> None: """Download SPED specification PDFs from official sources.""" # Configure basic logging if not already configured by test runner or other setup # This is a simple fallback for direct script execution. diff --git a/spedextractor/extract_tables.py b/spedextractor/extract_tables.py index 9c6bc07..99163e9 100644 --- a/spedextractor/extract_tables.py +++ b/spedextractor/extract_tables.py @@ -171,7 +171,7 @@ def main( target_module_str: Optional[str], limit_pages_to_extract: int, chunk_size: int, -): +) -> None: """ Extract tables from SPED module PDF using Camelot. PDFs are expected in './specs/MODULE/LAYOUT/pdf/' or will be downloaded if missing. diff --git a/spedextractor/gen_odoo.py b/spedextractor/gen_odoo.py index 4fc5e37..21d09f3 100644 --- a/spedextractor/gen_odoo.py +++ b/spedextractor/gen_odoo.py @@ -2,7 +2,7 @@ import logging from collections import OrderedDict, defaultdict from pathlib import Path -from typing import Any, Dict, List +from typing import Any, List import click from xsdata.codegen.models import Attr, AttrType, Class, Restrictions @@ -11,7 +11,7 @@ from xsdata_odoo.text_utils import extract_string_and_help from .build_csv import get_fields, get_registers -from .constants import MODULES, SPECS_PATH +from .constants import MODULES, SPECS_PATH, RegisterDict logger = logging.getLogger(__name__) logger.addHandler(logging.StreamHandler()) @@ -29,7 +29,7 @@ """ -def collect_register_children(registers): +def collect_register_children(registers: list[RegisterDict]) -> None: """read the registers hierarchy.""" for register_info in registers: if register_info["level"] > 1: @@ -55,7 +55,7 @@ def collect_register_children(registers): register_info["children_m2o"] = children_m2o -def _get_alphanum_sequence(register_code): +def _get_alphanum_sequence(register_code: str) -> str: """ Used to order the SPED register in the same order as in the SPED layout (the register name alone won't cut it) @@ -71,7 +71,7 @@ def _get_alphanum_sequence(register_code): return "1" + register_code -def get_structure(mod, registers): +def get_structure(mod: str, registers: list[RegisterDict]) -> str: structure = f"STRUCTURE SPED {mod.upper()}" for reg in registers: short_desc, left = extract_string_and_help( @@ -118,7 +118,7 @@ def registry_name( name = self.class_name(name) return f"{self.schema}.{self.version}.{name[-4:].lower()}" - def registry_comodel(self, type_name: str): + def registry_comodel(self, type_name: str) -> str: # NOTE: we take only the last part of inner Types with .split(".")[-1] # but if that were to create Type duplicates we could change that. clean_type_names = type_name.replace('"', "").split(".") @@ -129,12 +129,12 @@ def registry_comodel(self, type_name: str): def class_properties( self, obj: Class, - parents: List[Class], + parents: list[Class], ) -> str: register = list(filter(lambda x: x["code"] == obj.name[-4:], self.registers))[0] return f"_sped_level = {register['level']}" - def odoo_class_name(self, obj: Class, parents: List[Class] = []): + def odoo_class_name(self, obj: Class, parents: list[Class] = []) -> str: return obj.name def odoo_inherit_model(self, obj: Class) -> str: @@ -217,7 +217,9 @@ def _extract_field_attributes( return kwargs - def _extract_number_attrs(self, obj: Class, attr: Attr, kwargs: Dict[str, Dict]): + def _extract_number_attrs( + self, obj: Class, attr: Attr, kwargs: dict[str, Any] + ) -> None: python_type = attr.types[0].datatype.code if python_type in ("float", "decimal", "integer"): xsd_type = kwargs.get("xsd_type", "") @@ -242,7 +244,7 @@ def _extract_number_attrs(self, obj: Class, attr: Attr, kwargs: Dict[str, Dict]) @click.command() -def main(): +def main() -> None: """Generate Odoo models.""" os.environ["XSDATA_LANG"] = "portuguese" @@ -308,8 +310,9 @@ def main(): registers = list( sorted( filter( - lambda x: x["code"][0] != "C" - or mod not in ("ecd", "ecf"), # filled by the validator + lambda x: ( + x["code"][0] != "C" or mod not in ("ecd", "ecf") + ), # filled by the validator get_registers(mod, layout), ), key=lambda x: _get_alphanum_sequence(x["code"]), diff --git a/spedextractor/get_table_headers.py b/spedextractor/get_table_headers.py index f147a52..be53e85 100644 --- a/spedextractor/get_table_headers.py +++ b/spedextractor/get_table_headers.py @@ -3,43 +3,48 @@ import click from .build_csv import _is_reg_row, clean_row, get_raw_rows -from .constants import MODULES, MOST_RECENT_YEAR, OLDEST_YEAR +from .constants import MODULES logger = logging.getLogger(__name__) logger.addHandler(logging.StreamHandler()) logger.setLevel(logging.INFO) -def get_mod_table_headers(mod, year): - previous_row = False - headers = [] - raw_rows = get_raw_rows(mod, year) +def get_mod_table_headers(mod: str, layout: int) -> list[list[str]]: + """Extract table headers from a module's raw CSV data.""" + previous_row: list[str] | None = None + headers: list[list[str]] = [] + raw_rows = get_raw_rows(mod, layout) for page in raw_rows: for row in raw_rows[page]: - row = clean_row(row) - if len(row) > 2 and _is_reg_row(row) and previous_row not in headers: + cleaned_row = clean_row(row) + if ( + len(cleaned_row) > 2 + and _is_reg_row(cleaned_row) + and previous_row is not None + and previous_row not in headers + ): headers.append(previous_row) - previous_row = row + previous_row = cleaned_row return headers @click.option( - "--year", - default=MOST_RECENT_YEAR, - show_default=True, - type=click.IntRange(OLDEST_YEAR, MOST_RECENT_YEAR), - help="Operate on a specific year's folder, " - f"can be between {OLDEST_YEAR} and {MOST_RECENT_YEAR}", + "--layout", + "target_layout", + type=int, + help="Specific layout version to process (if not provided, uses the default for each module)", ) @click.command() -def main(year): +def main(target_layout: int | None) -> None: """Display a list of all the different fields headers found in the four modules. Used to define the modules headers hard-coded at the beginning of ./build_csv.py . """ for mod in MODULES: - headers = get_mod_table_headers(mod, year) + layout = target_layout if target_layout is not None else MODULES[mod][0] + headers = get_mod_table_headers(mod, layout) logger.info(f"\n{mod.upper()}'s headers :") for header in headers: logger.info(header) diff --git a/spedextractor/specs/ecd/9/l10n_br_sped_ecd/models/sped_ecd.py b/spedextractor/specs/ecd/9/l10n_br_sped_ecd/models/sped_ecd.py index 0b99f46..640f22d 100644 --- a/spedextractor/specs/ecd/9/l10n_br_sped_ecd/models/sped_ecd.py +++ b/spedextractor/specs/ecd/9/l10n_br_sped_ecd/models/sped_ecd.py @@ -1,11 +1,11 @@ -# Copyright 2023 - TODAY, Akretion - Raphael Valyi +# Copyright 2025 - TODAY, Akretion - Raphael Valyi # License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). # Generated by https://github.com/akretion/sped-extractor and xsdata-odoo # ruff: noqa: E501 import textwrap -from odoo import fields, models +from odoo import models class Registro0000(models.Model): @@ -168,8 +168,8 @@ class RegistroI012(models.Model): class RegistroI015(models.Model): - """IDENTIFICAÇÃO DAS CONTAS DA ESCRITURAÇÃO RESUMIDA A QUE SE REFERE A - ESCRITURAÇÃO AUXILIAR.""" + """IDENTIFICAÇÃO DAS CONTAS DA ESCRITURAÇÃO RESUMIDA A QUE SE REFERE A ESCRITURAÇÃO + AUXILIAR.""" _description = textwrap.dedent(f" {__doc__}") _name = "l10n_br_sped.ecd.i015" diff --git a/spedextractor/specs/ecd/9/l10n_br_sped_ecd/models/sped_ecd_spec_9.py b/spedextractor/specs/ecd/9/l10n_br_sped_ecd/models/sped_ecd_spec_9.py index 7dff9b0..db6d8d8 100644 --- a/spedextractor/specs/ecd/9/l10n_br_sped_ecd/models/sped_ecd_spec_9.py +++ b/spedextractor/specs/ecd/9/l10n_br_sped_ecd/models/sped_ecd_spec_9.py @@ -1,4 +1,4 @@ -# Copyright 2023 - TODAY, Akretion - Raphael Valyi +# Copyright 2025 - TODAY, Akretion - Raphael Valyi # License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). # Generated by https://github.com/akretion/sped-extractor and xsdata-odoo # ruff: noqa: E501 diff --git a/spedextractor/specs/ecf/10/l10n_br_sped_ecf/models/sped_ecf.py b/spedextractor/specs/ecf/10/l10n_br_sped_ecf/models/sped_ecf.py index 41bad26..6a8f31b 100644 --- a/spedextractor/specs/ecf/10/l10n_br_sped_ecf/models/sped_ecf.py +++ b/spedextractor/specs/ecf/10/l10n_br_sped_ecf/models/sped_ecf.py @@ -1,11 +1,11 @@ -# Copyright 2023 - TODAY, Akretion - Raphael Valyi +# Copyright 2025 - TODAY, Akretion - Raphael Valyi # License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). # Generated by https://github.com/akretion/sped-extractor and xsdata-odoo # ruff: noqa: E501 import textwrap -from odoo import fields, models +from odoo import models class Registro0000(models.Model): @@ -369,8 +369,8 @@ class RegistroJ100(models.Model): class RegistroK030(models.Model): - """Identificação dos Períodos e Formas de Apuração do IRPJ e da CSLL no Ano- - Calendário.""" + """Identificação dos Períodos e Formas de Apuração do IRPJ e da CSLL no + Ano-Calendário.""" _description = textwrap.dedent(f" {__doc__}") _name = "l10n_br_sped.ecf.k030" @@ -513,8 +513,8 @@ class RegistroK935(models.Model): class RegistroL030(models.Model): - """Identificação dos Períodos e Formas de Apuração do IRPJ e da CSLL no Ano- - Calendário.""" + """Identificação dos Períodos e Formas de Apuração do IRPJ e da CSLL no + Ano-Calendário.""" _description = textwrap.dedent(f" {__doc__}") _name = "l10n_br_sped.ecf.l030" @@ -711,8 +711,7 @@ class RegistroM312(models.Model): class RegistroM315(models.Model): - """Identificação de Processos Judiciais e Administrativos Referentes ao - Lançamento.""" + """Identificação de Processos Judiciais e Administrativos Referentes ao Lançamento.""" _description = textwrap.dedent(f" {__doc__}") _name = "l10n_br_sped.ecf.m315" @@ -793,8 +792,7 @@ class RegistroM362(models.Model): class RegistroM365(models.Model): - """Identificação de Processos Judiciais e Administrativos Referentes ao - Lançamento.""" + """Identificação de Processos Judiciais e Administrativos Referentes ao Lançamento.""" _description = textwrap.dedent(f" {__doc__}") _name = "l10n_br_sped.ecf.m365" @@ -829,8 +827,7 @@ class RegistroM410(models.Model): class RegistroM415(models.Model): - """Identificação de Processos Judiciais e Administrativos Referentes ao - Lançamento.""" + """Identificação de Processos Judiciais e Administrativos Referentes ao Lançamento.""" _description = textwrap.dedent(f" {__doc__}") _name = "l10n_br_sped.ecf.m415" diff --git a/spedextractor/specs/ecf/10/l10n_br_sped_ecf/models/sped_ecf_spec_10.py b/spedextractor/specs/ecf/10/l10n_br_sped_ecf/models/sped_ecf_spec_10.py index 286816f..d69a098 100644 --- a/spedextractor/specs/ecf/10/l10n_br_sped_ecf/models/sped_ecf_spec_10.py +++ b/spedextractor/specs/ecf/10/l10n_br_sped_ecf/models/sped_ecf_spec_10.py @@ -1,4 +1,4 @@ -# Copyright 2023 - TODAY, Akretion - Raphael Valyi +# Copyright 2025 - TODAY, Akretion - Raphael Valyi # License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). # Generated by https://github.com/akretion/sped-extractor and xsdata-odoo # ruff: noqa: E501 @@ -3218,7 +3218,7 @@ class RegistroM315(models.AbstractModel): _sped_level = 4 IND_PROC = fields.Char( - string="Tipo do Processo: 1", + string="Tipo do Processo", required=True, sped_length="1", help="Tipo do Processo: 1 - Judicial 2 – Administrativo", @@ -3478,7 +3478,7 @@ class RegistroM365(models.AbstractModel): _sped_level = 4 IND_PROC = fields.Char( - string="Tipo do Processo: 1", + string="Tipo do Processo", required=True, sped_length="1", help="Tipo do Processo: 1 - Judicial 2 – Administrativo", @@ -3594,7 +3594,7 @@ class RegistroM415(models.AbstractModel): _sped_level = 4 IND_PROC = fields.Char( - string="Tipo do Processo: 1", + string="Tipo do Processo", required=True, sped_length="1", help="Tipo do Processo: 1 - Judicial 2 – Administrativo", diff --git a/spedextractor/specs/efd_icms_ipi/19/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi.py b/spedextractor/specs/efd_icms_ipi/19/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi.py index 22c1879..a414c19 100644 --- a/spedextractor/specs/efd_icms_ipi/19/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi.py +++ b/spedextractor/specs/efd_icms_ipi/19/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi.py @@ -1,11 +1,11 @@ -# Copyright 2023 - TODAY, Akretion - Raphael Valyi +# Copyright 2025 - TODAY, Akretion - Raphael Valyi # License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). # Generated by https://github.com/akretion/sped-extractor and xsdata-odoo # ruff: noqa: E501 import textwrap -from odoo import fields, models +from odoo import models class Registro0000(models.Model): @@ -606,7 +606,7 @@ class RegistroB510(models.Model): class RegistroC100(models.Model): - """Documento - Nota Fiscal (código 01, 1B, 04, 55, 65).""" + """Documento - Nota Fiscal (código 01).""" _description = textwrap.dedent(f" {__doc__}") _name = "l10n_br_sped.efd_icms_ipi.c100" @@ -1224,8 +1224,8 @@ class RegistroC185(models.Model): class RegistroC186(models.Model): - """Informações complementares das operações de devolução de entradas de - mercadorias sujeitas.""" + """Informações complementares das operações de devolução de entradas de mercadorias + sujeitas.""" _description = textwrap.dedent(f" {__doc__}") _name = "l10n_br_sped.efd_icms_ipi.c186" diff --git a/spedextractor/specs/efd_icms_ipi/19/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi_spec_19.py b/spedextractor/specs/efd_icms_ipi/19/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi_spec_19.py index e296635..96c9790 100644 --- a/spedextractor/specs/efd_icms_ipi/19/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi_spec_19.py +++ b/spedextractor/specs/efd_icms_ipi/19/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi_spec_19.py @@ -1,4 +1,4 @@ -# Copyright 2023 - TODAY, Akretion - Raphael Valyi +# Copyright 2025 - TODAY, Akretion - Raphael Valyi # License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). # Generated by https://github.com/akretion/sped-extractor and xsdata-odoo # ruff: noqa: E501 diff --git a/spedextractor/specs/efd_icms_ipi/20/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi.py b/spedextractor/specs/efd_icms_ipi/20/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi.py new file mode 100644 index 0000000..2525580 --- /dev/null +++ b/spedextractor/specs/efd_icms_ipi/20/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi.py @@ -0,0 +1,5064 @@ +# Copyright 2025 - TODAY, Akretion - Raphael Valyi +# License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). +# Generated by https://github.com/akretion/sped-extractor and xsdata-odoo +# ruff: noqa: E501 + +import textwrap + +from odoo import models + + +class Registro0000(models.Model): + """Abertura do Arquivo Digital e Identificação da entidade.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0000" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0000" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_VER": 0, # Código da versão do leiaute conforme a tabela indica... + # "COD_FIN": 0, # Código da finalidade do arquivo: 0 - Remessa do arqu... + # "DT_INI": 0, # Data inicial das informações contidas no arquivo + # "DT_FIN": 0, # Data final das informações contidas no arquivo + # "NOME": 0, # Nome empresarial da entidade + # "CNPJ": 0, # Número de inscrição da entidade no CNPJ + # "CPF": 0, # Número de inscrição da entidade no CPF + # "UF": 0, # Sigla da unidade da federação da entidade + # "IE": 0, # Inscrição Estadual da entidade + # "COD_MUN": 0, # Código do município do domicílio fiscal da entidade,... + # "IM": 0, # Inscrição Municipal da entidade + # "SUFRAMA": 0, # Inscrição da entidade na Suframa + # "IND_PERFIL": 0, # Perfil de apresentação do arquivo fiscal: + # "IND_ATIV": 0, # Indicador de tipo de atividade: 0 - Industrial ou e... + # } + + +class Registro0002(models.Model): + """Classificação do Estabelecimento Industrial ou Equiparado a Industrial.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0002" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0002" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CLAS_ESTAB_IND": 0, # Informar a classificação do estabelecimento c... + # } + + +class Registro0005(models.Model): + """Dados Complementares da entidade.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0005" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0005" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "FANTASIA": 0, # Nome de fantasia associado ao nome empresarial + # "CEP": 0, # Código de Endereçamento Postal + # "END": 0, # Logradouro e endereço do imóvel + # "NUM": 0, # Número do imóvel + # "COMPL": 0, # Dados complementares do endereço + # "BAIRRO": 0, # Bairro em que o imóvel está situado + # "FONE": 0, # Número do telefone + # "FAX": 0, # Número do fax + # "EMAIL": 0, # Endereço do correio eletrônico + # } + + +class Registro0015(models.Model): + """Dados do Contribuinte Substituto ou Responsável pelo ICMS Destino.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0015" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0015" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "UF_ST": 0, # Sigla da unidade da federação do contribuinte substitu... + # "IE_ST": 0, # Inscrição Estadual do contribuinte substituto na unida... + # } + + +class Registro0100(models.Model): + """Dados do Contabilista.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0100" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0100" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NOME": 0, # Nome do contabilista + # "CPF": 0, # Número de inscrição do contabilista no CPF + # "CRC": 0, # Número de inscrição do contabilista no Conselho Regional... + # "CNPJ": 0, # Número de inscrição do escritório de contabilidade no C... + # "CEP": 0, # Código de Endereçamento Postal + # "END": 0, # Logradouro e endereço do imóvel + # "NUM": 0, # Número do imóvel + # "COMPL": 0, # Dados complementares do endereço + # "BAIRRO": 0, # Bairro em que o imóvel está situado + # "FONE": 0, # Número do telefone + # "FAX": 0, # Número do fax + # "EMAIL": 0, # Endereço do correio eletrônico + # "COD_MUN": 0, # Código do município, conforme tabela IBGE + # } + + +class Registro0150(models.Model): + """Tabela de Cadastro do Participante.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0150" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0150" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART": 0, # Código de identificação do participante no arquivo + # "NOME": 0, # Nome pessoal ou empresarial do participante + # "COD_PAIS": 0, # Código do país do participante, conforme a tabela i... + # "CNPJ": 0, # CNPJ do participante + # "CPF": 0, # CPF do participante + # "IE": 0, # Inscrição Estadual do participante + # "COD_MUN": 0, # Código do município, conforme a tabela IBGE + # "SUFRAMA": 0, # Número de inscrição do participante na Suframa. + # "END": 0, # Logradouro e endereço do imóvel + # "NUM": 0, # Número do imóvel + # "COMPL": 0, # Dados complementares do endereço + # "BAIRRO": 0, # Bairro em que o imóvel está situado + # } + + +class Registro0175(models.Model): + """Alteração da Tabela de Cadastro de Participante.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0175" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0175" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_ALT": 0, # Data de alteração do cadastro + # "NR_CAMPO": 0, # Número do campo alterado (campos 03 a 13, exceto 07... + # "CONT_ANT": 0, # Conteúdo anterior do campo + # } + + +class Registro0190(models.Model): + """Identificação das unidades de medida.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0190" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0190" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "UNID": 0, # Código da unidade de medida + # "DESCR": 0, # Descrição da unidade de medida + # } + + +class Registro0200(models.Model): + """Tabela de Identificação do Item.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0200" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0200" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código do item + # "DESCR_ITEM": 0, # Descrição do item + # "COD_BARRA": 0, # Representação alfanumérico do código de barra do p... + # "COD_ANT_ITEM": 0, # Código anterior do item com relação à última in... + # "UNID_INV": 0, # Unidade de medida utilizada na quantificação de est... + # "TIPO_ITEM": 0, # Tipo do item - Atividades Industriais, Comerciais ... + # "COD_NCM": 0, # Código da Nomenclatura Comum do Mercosul + # "EX_IPI": 0, # Código EX, conforme a TIPI + # "COD_GEN": 0, # Código do gênero do item, conforme a tabela 4.2.1 + # "COD_LST": 0, # Código do serviço conforme lista do Anexo I da Lei C... + # "ALIQ_ICMS": 0, # Alíquota de ICMS aplicável ao item nas operações i... + # "CEST": 0, # Código Especificador da Substituição Tributária + # } + + +class Registro0205(models.Model): + """Alteração do Item.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0205" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0205" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DESCR_ANT_ITEM": 0, # Descrição anterior do item + # "DT_INI": 0, # Data inicial de utilização da descrição do item + # "DT_FIM": 0, # Data final de utilização da descrição do item + # "COD_ANT_ITEM": 0, # Código anterior do item com relação à última in... + # } + + +class Registro0206(models.Model): + """Código de produto conforme Tabela ANP.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0206" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0206" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_COMB": 0, # Código do produto, conforme tabela publicada pela A... + # } + + +class Registro0210(models.Model): + """Consumo Específico Padronizado.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0210" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0210" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # } + + +class Registro0220(models.Model): + """Fatores de Conversão de Unidades.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0220" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0220" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "UNID_CONV": 0, # Unidade comercial a ser convertida na unidade de e... + # "FAT_CONV": 0, # Fator de conversão: fator utilizado para converter ... + # "COD_BARRA": 0, # Representação alfanumérica do código de barra da u... + # } + + +class Registro0221(models.Model): + """Correlação entre códigos de itens comercializados.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0221" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0221" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM_ATOMICO": 0, # Informar o código do item atômico contido n... + # "QTD_CONTIDA": 0, # Informar quantos itens atômicos estão contidos n... + # } + + +class Registro0300(models.Model): + """Cadastro de bens ou componentes do Ativo Imobilizado.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0300" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0300" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_IND_BEM": 0, # Código individualizado do bem ou componente adot... + # "IDENT_MERC": 0, # Identificação do tipo de mercadoria: 1 = bem 2 = ... + # "DESCR_ITEM": 0, # Descrição do bem ou componente (modelo, marca e o... + # "COD_PRNC": 0, # Código de cadastro do bem principal nos casos em qu... + # "COD_CTA": 0, # Código da conta analítica de contabilização do bem o... + # "NR_PARC": 0, # Número total de parcelas a serem apropriadas, segund... + # } + + +class Registro0305(models.Model): + """Informação sobre a Utilização do Bem.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0305" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0305" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_CCUS": 0, # Código do centro de custo onde o bem está sendo ou ... + # "FUNC": 0, # Descrição sucinta da função do bem na atividade do esta... + # "VIDA_UTIL": 0, # Vida útil estimada do bem, em número de meses + # } + + +class Registro0400(models.Model): + """Tabela de Natureza da Operação/ Prestação.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0400" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0400" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_NAT": 0, # Código da natureza da operação/prestação + # "DESCR_NAT": 0, # Descrição da natureza da operação/prestação + # } + + +class Registro0450(models.Model): + """Tabela de Informação Complementar do documento fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0450" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0450" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_INF": 0, # Código da informação complementar do documento fisca... + # "TXT": 0, # Texto livre da informação complementar existente no docu... + # } + + +class Registro0460(models.Model): + """Tabela de Observações do Lançamento Fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0460" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0460" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OBS": 0, # Código da observação do lançamento fiscal + # "TXT": 0, # Descrição da observação vinculada ao lançamento fiscal + # } + + +class Registro0500(models.Model): + """Plano de contas contábeis.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0500" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0500" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_ALT": 0, # Data da inclusão/alteração + # "COD_NAT_CC": 0, # Código da natureza da conta/grupo de contas: 01 -... + # "IND_CTA": 0, # Indicador do tipo de conta: S - Sintética (grupo de ... + # "NIVEL": 0, # Nível da conta analítica/grupo de contas + # "COD_CTA": 0, # Código da conta analítica/grupo de contas + # "NOME_CTA": 0, # Nome da conta analítica/grupo de contas + # } + + +class Registro0600(models.Model): + """Centro de custos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.0600" + _inherit = "l10n_br_sped.efd_icms_ipi.20.0600" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_ALT": 0, # Data da inclusão/alteração + # "COD_CCUS": 0, # Código do centro de custos + # "CCUS": 0, # Nome do centro de custos + # } + + +class RegistroB020(models.Model): + """Nota Fiscal (código 01).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.b020" + _inherit = "l10n_br_sped.efd_icms_ipi.20.b020" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_OPER": 0, # Indicador do tipo de operação: 0- Aquisição 1- Pres... + # "IND_EMIT": 0, # Indicador do emitente do documento fiscal: 0- Emiss... + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "COD_SIT": 0, # Código da situação do documento conforme tabela 4.1.... + # "SER": 0, # Série do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "CHV_NFE": 0, # Chave da Nota Fiscal Eletrônica + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "COD_MUN_SERV": 0, # Código do município onde o serviço foi prestado... + # "VL_CONT": 0, # Valor contábil (valor total do documento) + # "VL_MAT_TERC": 0, # Valor do material fornecido por terceiros na pre... + # "VL_SUB": 0, # Valor da subempreitada + # "VL_ISNT_ISS": 0, # Valor das operações isentas ou não-tributadas pe... + # "VL_DED_BC": 0, # Valor da dedução da base de cálculo + # "VL_BC_ISS": 0, # Valor da base de cálculo do ISS + # "VL_BC_ISS_RT": 0, # Valor da base de cálculo de retenção do ISS + # "VL_ISS_RT": 0, # Valor do ISS retido pelo tomador + # "VL_ISS": 0, # Valor do ISS destacado + # "COD_INF_OBS": 0, # Código da observação do lançamento fiscal (campo... + # } + + +class RegistroB025(models.Model): + """Detalhamento por combinação de alíquota e item da lista de serviços da Lei + Complementar nº 116/2003.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.b025" + _inherit = "l10n_br_sped.efd_icms_ipi.20.b025" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_CONT_P": 0, # Parcela correspondente ao "Valor Contábil" referen... + # "VL_BC_ISS_P": 0, # Parcela correspondente ao "Valor da base de cálc... + # "ALIQ_ISS": 0, # Alíquota do ISS + # "VL_ISS_P": 0, # Parcela correspondente ao "Valor do ISS" referente ... + # "VL_ISNT_ISS_P": 0, # Parcela correspondente ao "Valor das operações... + # "COD_SERV": 0, # Item da lista de serviços, conforme tabela 4.6.3 + # } + + +class RegistroB030(models.Model): + """Nota fiscal de Serviços Simplificada.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.b030" + _inherit = "l10n_br_sped.efd_icms_ipi.20.b030" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "NUM_DOC_INI": 0, # Número do primeiro documento fiscal emitido no d... + # "NUM_DOC_FIN": 0, # Número do último documento fiscal emitido no dia + # "DT_DOC": 0, # Data da emissão dos documentos fiscais + # "QTD_CANC": 0, # Quantidade de documentos cancelados + # "VL_CONT": 0, # Valor contábil (valor total acumulado dos documentos... + # "VL_ISNT_ISS": 0, # Valor acumulado das operações isentas ou não-tri... + # "VL_BC_ISS": 0, # Valor acumulado da base de cálculo do ISS + # "VL_ISS": 0, # Valor acumulado do ISS destacado + # "COD_INF_OBS": 0, # Código da observação do lançamento fiscal (campo... + # } + + +class RegistroB035(models.Model): + """Detalhamento por combinação de alíquota e item da lista de serviços da Lei + Complementar nº 116/2003.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.b035" + _inherit = "l10n_br_sped.efd_icms_ipi.20.b035" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_CONT_P": 0, # Parcela correspondente ao "Valor Contábil" referen... + # "VL_BC_ISS_P": 0, # Parcela correspondente ao "Valor da base de cálc... + # "ALIQ_ISS": 0, # Alíquota do ISS + # "VL_ISS_P": 0, # Parcela correspondente ao "Valor do ISS" referente ... + # "VL_ISNT_ISS_P": 0, # Parcela correspondente ao "Valor das operações... + # "COD_SERV": 0, # Item da lista de serviços, conforme tabela 4.6.3 + # } + + +class RegistroB350(models.Model): + """Serviços prestados por instituições financeiras.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.b350" + _inherit = "l10n_br_sped.efd_icms_ipi.20.b350" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_CTD": 0, # Código da conta do plano de contas + # "CTA_ISS": 0, # Descrição da conta no plano de contas + # "CTA_COSIF": 0, # Código COSIF a que está subordinada a conta do ISS... + # "QTD_OCOR": 0, # Quantidade de ocorrências na conta + # "COD_SERV": 0, # Item da lista de serviços, conforme tabela 4.6.3 + # "VL_CONT": 0, # Valor contábil + # "VL_BC_ISS": 0, # Valor da base de cálculo do ISS + # "ALIQ_ISS": 0, # Alíquota do ISS + # "VL_ISS": 0, # Valor do ISS + # "COD_INF_OBS": 0, # Código da observação do lançamento fiscal (campo... + # } + + +class RegistroB420(models.Model): + """Totalização dos valores de serviços prestados por combinação de alíquota e item + da lista de serviços.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.b420" + _inherit = "l10n_br_sped.efd_icms_ipi.20.b420" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_CONT": 0, # Totalização do Valor Contábil das prestações do decl... + # "VL_BC_ISS": 0, # Totalização do Valor da base de cálculo do ISS das... + # "ALIQ_ISS": 0, # Alíquota do ISS + # "VL_ISNT_ISS": 0, # Totalização do valor das operações isentas ou nã... + # "VL_ISS": 0, # Totalização, por combinação da alíquota e item da lis... + # "COD_SERV": 0, # Item da lista de serviços, conforme tabela 4.6.3 + # } + + +class RegistroB440(models.Model): + """Totalização dos valores retidos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.b440" + _inherit = "l10n_br_sped.efd_icms_ipi.20.b440" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_OPER": 0, # Indicador do tipo de operação: 0 - Aquisição 1 – Pr... + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "VL_CONT_RT": 0, # Totalização do valor contábil das prestações e/ou... + # "VL_BC_ISS_RT": 0, # Totalização do valor da base de cálculo de rete... + # "VL_ISS_RT": 0, # Totalização do valor do ISS retido pelo tomador da... + # } + + +class RegistroB460(models.Model): + """Deduções do ISS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.b460" + _inherit = "l10n_br_sped.efd_icms_ipi.20.b460" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_DED": 0, # Indicador do tipo de dedução: 0 - Compensação do ISS... + # "VL_DED": 0, # Valor da dedução + # "NUM_PROC": 0, # Número do processo ao qual o ajuste está vinculado,... + # "IND_PROC": 0, # Indicador da origem do processo: 0 - Sefin 1 - Just... + # "PROC": 0, # Descrição do processo que embasou o lançamento + # "COD_INF_OBS": 0, # Código da observação do lançamento fiscal (campo... + # "IND_OBR": 0, # Indicador da obrigação onde será aplicada a dedução:... + # } + + +class RegistroB470(models.Model): + """Apuração do ISS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.b470" + _inherit = "l10n_br_sped.efd_icms_ipi.20.b470" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_CONT": 0, # A - Valor total referente às prestações de serviço d... + # "VL_MAT_TERC": 0, # B - Valor total do material fornecido por tercei... + # "VL_MAT_PROP": 0, # C - Valor do material próprio utilizado na prest... + # "VL_SUB": 0, # D - Valor total das subempreitadas + # "VL_ISNT": 0, # E - Valor total das operações isentas ou não-tributa... + # "VL_DED_BC": 0, # F - Valor total das deduções da base de cálculo (B... + # "VL_BC_ISS": 0, # G - Valor total da base de cálculo do ISS + # "VL_BC_ISS_RT": 0, # H - Valor total da base de cálculo de retenção ... + # "VL_ISS": 0, # I - Valor total do ISS destacado + # "VL_ISS_RT": 0, # J - Valor total do ISS retido pelo tomador nas pre... + # "VL_DED": 0, # K - Valor total das deduções do ISS próprio + # "VL_ISS_REC": 0, # L - Valor total apurado do ISS próprio a recolher... + # "VL_ISS_ST": 0, # M - Valor total do ISS substituto a recolher pelas... + # "VL_ISS_REC_UNI": 0, # N - Valor do ISS próprio a recolher pela soci... + # } + + +class RegistroB500(models.Model): + """Apuração do ISS sociedade uniprofissional.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.b500" + _inherit = "l10n_br_sped.efd_icms_ipi.20.b500" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_REC": 0, # Valor mensal das receitas auferidas pela sociedade un... + # "QTD_PROF": 0, # Quantidade de profissionais habilitados + # "VL_OR": 0, # Valor do ISS devido + # } + + +class RegistroB510(models.Model): + """Uniprofissional – empregados e sócios.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.b510" + _inherit = "l10n_br_sped.efd_icms_ipi.20.b510" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_PROF": 0, # Indicador de habilitação: 0- Profissional habilitad... + # "IND_ESC": 0, # Indicador de escolaridade: 0- Nível superior 1- Níve... + # "IND_SOC": 0, # Indicador de participação societária: 0- Sócio 1- Nã... + # "CPF": 0, # Número de inscrição do profissional no CPF + # "NOME": 0, # Nome do profissional + # } + + +class RegistroC100(models.Model): + """Documento - Nota Fiscal (código 01).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c100" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c100" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_OPER": 0, # Indicador do tipo de operação: 0 - Entrada 1 – Saíd... + # "IND_EMIT": 0, # Indicador do emitente do documento fiscal: 0 - Emis... + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "COD_SIT": 0, # Código da situação do documento fiscal, conforme a t... + # "SER": 0, # Série do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "CHV_NFE": 0, # Chave da Nota Fiscal Eletrônica + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "DT_E_S": 0, # Data da entrada ou da saída + # "VL_DOC": 0, # Valor total do documento fiscal + # "IND_PGTO": 0, # Indicador do tipo de pagamento: 0 - À vista 1 - A p... + # "VL_DESC": 0, # Valor total do desconto + # "VL_ABAT_NT": 0, # Abatimento não tributado e não comercial Ex. desc... + # "VL_MERC": 0, # Valor total das mercadorias e serviços + # "IND_FRT": 0, # Indicador do tipo de frete: 0 - contratação do frete... + # "VL_FRT": 0, # Valor do frete indicado no documento fiscal + # "VL_SEG": 0, # Valor do seguro indicado no documento fiscal + # "VL_OUT_DA": 0, # Valor de outras despesas acessórias + # "VL_BC_ICMS": 0, # Valor da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor do ICMS + # "VL_BC_ICMS_ST": 0, # Valor da base de cálculo do ICMS substituição ... + # "VL_ICMS_ST": 0, # Valor do ICMS retido por substituição tributária + # "VL_IPI": 0, # Valor total do IPI + # "VL_PIS": 0, # Valor total do PIS + # "VL_COFINS": 0, # Valor total da COFINS + # "VL_PIS_ST": 0, # Valor total do PIS retido por substituição tributá... + # "VL_COFINS_ST": 0, # Valor total da COFINS retida por substituição t... + # } + + +class RegistroC101(models.Model): + """Informação complementar dos documentos fiscais quando das operações + interestaduais destinadas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c101" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c101" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_FCP_UF_DEST": 0, # Valor total relativo ao Fundo de Combate à Po... + # "VL_ICMS_UF_DEST": 0, # Valor total do ICMS Interestadual para a UF ... + # "VL_ICMS_UF_REM": 0, # Valor total do ICMS Interestadual para a UF d... + # } + + +class RegistroC105(models.Model): + """Operações com ICMS ST recolhido para UF diversa do destinatário do documento + fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c105" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c105" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "OPER": 0, # Indicador do tipo de operação: 0 - Combustíveis e Lubri... + # "UF": 0, # Sigla da UF de destino do ICMS_ST + # } + + +class RegistroC110(models.Model): + """Complemento de Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c110" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c110" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_INF": 0, # Código da informação complementar do documento fisca... + # "TXT_COMPL": 0, # Descrição complementar do código de referência + # } + + +class RegistroC111(models.Model): + """Complemento de Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c111" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c111" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_PROC": 0, # Identificação do processo ou ato concessório + # "IND_PROC": 0, # Indicador da origem do processo: 0- Sefaz 1 - Justi... + # } + + +class RegistroC112(models.Model): + """Complemento de Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c112" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c112" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_DA": 0, # Código do modelo do documento de arrecadação: 0 - Doc... + # "UF": 0, # Unidade federada beneficiária do recolhimento + # "NUM_DA": 0, # Número do documento de arrecadação + # "COD_AUT": 0, # Código completo da autenticação bancária + # "VL_DA": 0, # Valor do total do documento de arrecadação (principal,... + # "DT_VCTO": 0, # Data de vencimento do documento de arrecadação + # "DT_PGTO": 0, # Data de pagamento do documento de arrecadação, ou da... + # } + + +class RegistroC113(models.Model): + """Complemento de Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c113" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c113" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_OPER": 0, # Indicador do tipo de operação: 0- Entrada/aquisição... + # "IND_EMIT": 0, # Indicador do emitente do título: 0- Emissão própria... + # "COD_PART": 0, # Código do participante emitente (campo 02 do Regist... + # "COD_MOD": 0, # Código do documento fiscal, conforme a tabela 4.1.1 + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "CHV_DOCE": 0, # Chave do Documento Eletrônico + # } + + +class RegistroC114(models.Model): + """Complemento de Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c114" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c114" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "ECF_FAB": 0, # Número de série de fabricação do ECF + # "ECF_CX": 0, # Número do caixa atribuído ao ECF + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # } + + +class RegistroC115(models.Model): + """Local de coleta e/ou entrega.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c115" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c115" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_CARGA": 0, # Indicador do tipo de transporte: 0 - Rodoviário 1 ... + # "CNPJ_COL": 0, # Número do CNPJ do contribuinte do local de coleta + # "IE_COL": 0, # Inscrição estadual do contribuinte do local de coleta + # "CPF_COL": 0, # CPF do contribuinte do local de coleta das mercadori... + # "COD_MUN_COL": 0, # Código do Município do local de coleta + # "CNPJ_ENTG": 0, # Número do CNPJ do contribuinte do local de entrega + # "IE_ENTG": 0, # Inscrição estadual do contribuinte do local de entre... + # "CPF_ENTG": 0, # CPF do contribuinte do local de entrega + # "COD_MUN_ENTG": 0, # Código do município do local de entrega + # } + + +class RegistroC116(models.Model): + """Cupom Fiscal Eletrônico.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c116" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c116" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "NR_SAT": 0, # Número de Série do equipamento SAT + # "CHV_CFE": 0, # Chave do Cupom Fiscal Eletrônico + # "NUM_CFE": 0, # Número do Cupom Fiscal Eletrônico + # "DT_DOC": 0, # Data da emissão do documento fiscal + # } + + +class RegistroC120(models.Model): + """Complemento de Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c120" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c120" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_DOC_IMP": 0, # Documento de importação: 0 - Declaração de impor... + # "NUM_DOC_IMP": 0, # Número do documento de importação. + # "PIS_IMP": 0, # Valor pago de PIS na importação + # "COFINS_IMP": 0, # Valor pago de COFINS na importação + # "NUM_ACDRAW": 0, # Número do ato concessório do regime Drawback + # } + + +class RegistroC130(models.Model): + """Complemento de Documento - ISSQN.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c130" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c130" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_SERV_NT": 0, # Valor dos serviços sob não-incidência ou não-trib... + # "VL_BC_ISSQN": 0, # Valor da base de cálculo do ISSQN + # "VL_ISSQN": 0, # Valor do ISSQN + # "VL_BC_IRRF": 0, # Valor da base de cálculo do Imposto de Renda Reti... + # "VL_IRRF": 0, # Valor do Imposto de Renda retido na fonte + # "VL_BC_PREV": 0, # Valor da base de cálculo de retenção da Previdênc... + # "VL_PREV": 0, # Valor destacado para retenção da Previdência Social + # } + + +class RegistroC140(models.Model): + """Complemento de Documento - Fatura.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c140" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c140" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_EMIT": 0, # Indicador do emitente do título: 0 - Emissão própri... + # "IND_TIT": 0, # Indicador do tipo de título de crédito: 00 - Duplica... + # "DESC_TIT": 0, # Descrição complementar do título de crédito + # "NUM_TIT": 0, # Número ou código identificador do título de crédito + # "QTD_PARC": 0, # Quantidade de parcelas a receber/pagar + # "VL_TIT": 0, # Valor total dos títulos de créditos + # } + + +class RegistroC141(models.Model): + """Complemento de Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c141" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c141" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_PARC": 0, # Número da parcela a receber/pagar + # "DT_VCTO": 0, # Data de vencimento da parcela + # "VL_PARC": 0, # Valor da parcela a receber/pagar + # } + + +class RegistroC160(models.Model): + """Complemento de Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c160" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c160" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "VEIC_ID": 0, # Placa de identificação do veículo automotor + # "QTD_VOL": 0, # Quantidade de volumes transportados + # "PESO_BRT": 0, # Peso bruto dos volumes transportados (em kg) + # "PESO_LIQ": 0, # Peso líquido dos volumes transportados (em kg) + # "UF_ID": 0, # Sigla da UF da placa do veículo + # } + + +class RegistroC165(models.Model): + """Complemento de Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c165" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c165" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "VEIC_ID": 0, # Placa de identificação do veículo + # "COD_AUT": 0, # Código da autorização fornecido pela SEFAZ (combustí... + # "NR_PASSE": 0, # Número do Passe Fiscal + # "HORA": 0, # Hora da saída das mercadorias + # "TEMPER": 0, # Temperatura em graus Celsius utilizada para quantific... + # "QTD_VOL": 0, # Quantidade de volumes transportados + # "PESO_BRT": 0, # Peso bruto dos volumes transportados (em kg) + # "PESO_LIQ": 0, # Peso líquido dos volumes transportados (em kg) + # "NOM_MOT": 0, # Nome do motorista + # "CPF": 0, # CPF do motorista + # "UF_ID": 0, # Sigla da UF da placa do veículo + # } + + +class RegistroC170(models.Model): + """Complemento de Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c170" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c170" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_ITEM": 0, # Número sequencial do item no documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "DESCR_COMPL": 0, # Descrição complementar do item como adotado no d... + # "QTD": 0, # Quantidade do item + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor total do item (mercadorias ou serviços) + # "VL_DESC": 0, # Valor do desconto comercial + # "IND_MOV": 0, # Movimentação física do item/Produto: + # "CST_ICMS": 0, # Código da Situação Tributária referente ao ICMS, co... + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "COD_NAT": 0, # Código da natureza da operação (campo 02 do Registro... + # "VL_BC_ICMS": 0, # Valor da base de cálculo do ICMS + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_ICMS": 0, # Valor do ICMS creditado/debitado + # "VL_BC_ICMS_ST": 0, # Valor da base de cálculo referente à substitui... + # "ALIQ_ST": 0, # Alíquota do ICMS da substituição tributária na unida... + # "VL_ICMS_ST": 0, # Valor do ICMS referente à substituição tributária + # "IND_APUR": 0, # Indicador de período de apuração do IPI: 0 - Mensal... + # "CST_IPI": 0, # Código da Situação Tributária referente ao IPI, conf... + # "COD_ENQ": 0, # Código de enquadramento legal do IPI, conforme tabel... + # "VL_BC_IPI": 0, # Valor da base de cálculo do IPI + # "ALIQ_IPI": 0, # Alíquota do IPI + # "VL_IPI": 0, # Valor do IPI creditado/debitado + # "CST_PIS": 0, # Código da Situação Tributária referente ao PIS. + # "VL_BC_PIS": 0, # Valor da base de cálculo do PIS + # "ALIQ_PIS": 0, # Alíquota do PIS (em percentual) + # "QUANT_BC_PIS": 0, # Quantidade - Base de cálculo PIS + # "ALIQ_PIS_INDEX_29": 0, # Alíquota do PIS (em reais) + # "VL_PIS": 0, # Valor do PIS + # "CST_COFINS": 0, # Código da Situação Tributária referente à COFINS. + # "VL_BC_COFINS": 0, # Valor da base de cálculo da COFINS + # "ALIQ_COFINS": 0, # Alíquota do COFINS (em percentual) + # "QUANT_BC_COFINS": 0, # Quantidade - Base de cálculo COFINS + # "ALIQ_COFINS_INDEX_35": 0, # Alíquota da COFINS (em reais) + # "VL_COFINS": 0, # Valor da COFINS + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # "VL_ABAT_NT": 0, # Valor do abatimento não tributado e não comercial + # } + + +class RegistroC171(models.Model): + """Complemento de Item.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c171" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c171" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_TANQUE": 0, # Tanque onde foi armazenado o combustível + # "QTDE": 0, # Quantidade ou volume armazenado + # } + + +class RegistroC172(models.Model): + """Complemento de Item.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c172" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c172" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_BC_ISSQN": 0, # Valor da base de cálculo do ISSQN + # "ALIQ_ISSQN": 0, # Alíquota do ISSQN + # "VL_ISSQN": 0, # Valor do ISSQN + # } + + +class RegistroC173(models.Model): + """Complemento de Item.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c173" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c173" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "LOTE_MED": 0, # Número do lote de fabricação do medicamento + # "QTD_ITEM": 0, # Quantidade de item por lote + # "DT_FAB": 0, # Data de fabricação do medicamento + # "DT_VAL": 0, # Data de expiração da validade do medicamento + # "IND_MED": 0, # Indicador de tipo de referência da base de cálculo d... + # "TP_PROD": 0, # Tipo de produto: 0- Similar 1- Genérico 2- Ético ou ... + # "VL_TAB_MAX": 0, # Valor do preço tabela do ou valor do preço máximo + # } + + +class RegistroC174(models.Model): + """Complemento de Item.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c174" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c174" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_ARM": 0, # Indicador do tipo da arma de fogo: 0- Uso permitido ... + # "NUM_ARM": 0, # Numeração de série de fabricação da arma + # "DESCR_COMPL": 0, # Descrição da arma, compreendendo: número do cano... + # } + + +class RegistroC175(models.Model): + """Complemento de Item.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c175" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c175" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_VEIC_OPER": 0, # Indicador do tipo de operação com veículo: 0- ... + # "CNPJ": 0, # CNPJ da concessionária + # "UF": 0, # Sigla da unidade da federação da concessionária + # "CHASSI_VEIC": 0, # Chassi do veículo + # } + + +class RegistroC176(models.Model): + """Complemento de Item.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c176" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c176" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD_ULT_E": 0, # Código do modelo do documento fiscal relativa ... + # "NUM_DOC_ULT_E": 0, # Número do documento fiscal relativa à última e... + # "SER_ULT_E": 0, # Série do documento fiscal relativa à última entrad... + # "DT_ULT_E": 0, # Data relativa a última entrada da mercadoria + # "COD_PART_ULT_E": 0, # Código do participante (do emitente do docume... + # "QUANT_ULT_E": 0, # Quantidade do item relativa à última entrada + # "VL_UNIT_ULT_E": 0, # Valor unitário da mercadoria constante na NF r... + # "VL_UNIT_BC_ST": 0, # Valor unitário da base de cálculo do imposto p... + # "CHAVE_NFE_ULT_E": 0, # Número completo da chave da NFe relativo à ú... + # "NUM_ITEM_ULT_E": 0, # Número sequencial do item na NF entrada que c... + # "VL_UNIT_BC_ICMS_ULT_E": 0, # Valor unitário da base de cálculo da o... + # "ALIQ_ICMS_ULT_E": 0, # Alíquota do ICMS aplicável à última entrada ... + # "VL_UNIT_LIMITE_BC_ICMS_ULT_E": 0, # Valor unitário da base de cálcu... + # "VL_UNIT_ICMS_ULT_E": 0, # Valor unitário do crédito de ICMS sobre o... + # "ALIQ_ST_ULT_E": 0, # Alíquota do ICMS ST relativa à última entrada ... + # "VL_UNIT_RES": 0, # Valor unitário do ressarcimento (parcial ou comp... + # "COD_RESP_RET": 0, # Código que indica o responsável pela retenção d... + # "COD_MOT_RES": 0, # Código do motivo do ressarcimento: 1 - Saída par... + # "CHAVE_NFE_RET": 0, # Número completo da chave da NF-e emitida pelo ... + # "COD_PART_NFE_RET": 0, # Código do participante do emitente da NF-e ... + # "SER_NFE_RET": 0, # Série da NF-e em que houve a retenção do ICMS-ST + # "NUM_NFE_RET": 0, # Número da NF-e em que houve a retenção do ICMS-S... + # "ITEM_NFE_RET": 0, # Número sequencial do item na NF-e em que houve ... + # "COD_DA": 0, # Código do modelo do documento de arrecadação: 0 - doc... + # "NUM_DA": 0, # Número do documento de arrecadação estadual, se houve... + # "VL_UNIT_RES_FCP_ST": 0, # Valor unitário do ressarcimento (parcial ... + # } + + +class RegistroC177(models.Model): + """Complemento de Item – Outras informações.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c177" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c177" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_INF_ITEM": 0, # Código da informação adicional de acordo com ta... + # } + + +class RegistroC178(models.Model): + """Complemento de Item.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c178" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c178" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CL_ENQ": 0, # Código da classe de enquadramento do IPI, conforme ta... + # "VL_UNID": 0, # Valor por unidade padrão de tributação + # "QUANT_PAD": 0, # Quantidade total de produtos na unidade padrão de ... + # } + + +class RegistroC179(models.Model): + """Complemento de Item.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c179" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c179" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "BC_ST_ORIG_DEST": 0, # Valor da base de cálculo ST na origem/destin... + # "ICMS_ST_REP": 0, # Valor do ICMS-ST a repassar/deduzir em operações... + # "ICMS_ST_COMPL": 0, # Valor do ICMS-ST a complementar à UF de destin... + # "BC_RET": 0, # Valor da BC de retenção em remessa promovida por Subs... + # "ICMS_RET": 0, # Valor da parcela do imposto retido em remessa promo... + # } + + +class RegistroC180(models.Model): + """Informações complementares das operações de entrada de mercadorias sujeitas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c180" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c180" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_RESP_RET": 0, # Código que indica o responsável pela retenção d... + # "QUANT_CONV": 0, # Quantidade do item + # "UNID": 0, # Unidade adotada para informar o campo QUANT_CONV. + # "VL_UNIT_CONV": 0, # Valor unitário da mercadoria, considerando a un... + # "VL_UNIT_ICMS_OP_CONV": 0, # Valor unitário do ICMS operação própria... + # "VL_UNIT_BC_ICMS_ST_CONV": 0, # Valor unitário da base de cálculo do... + # "VL_UNIT_ICMS_ST_CONV": 0, # Valor unitário do imposto pago ou retid... + # "VL_UNIT_FCP_ST_CONV": 0, # Valor unitário do FCP_ST agregado ao val... + # "COD_DA": 0, # Código do modelo do documento de arrecadação: 0 – Doc... + # "NUM_DA": 0, # Número do documento de arrecadação, se houver + # } + + +class RegistroC181(models.Model): + """Informações complementares das operações de devolução de saídas de mercadorias + sujeitas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c181" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c181" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOT_REST_COMPL": 0, # Código do motivo da restituição ou comple... + # "QUANT_CONV": 0, # Quantidade do item + # "UNID": 0, # Unidade adotada para informar o campo QUANT_CONV. + # "COD_MOD_SAIDA": 0, # Código do modelo do documento fiscal de saída,... + # "SERIE_SAIDA": 0, # Número de série do documento de saída em papel + # "ECF_FAB_SAIDA": 0, # Número de série de fabricação do equipamento E... + # "NUM_DOC_SAIDA": 0, # Número do documento fiscal de saída + # "CHV_DFE_SAIDA": 0, # Chave do documento fiscal eletrônico de saída + # "DT_DOC_SAIDA": 0, # Data da emissão do documento fiscal de saída + # "NUM_ITEM_SAIDA": 0, # Número do item em que foi escriturada a saída... + # "VL_UNIT_CONV_SAIDA": 0, # Valor unitário da mercadoria, considerand... + # } + + +class RegistroC185(models.Model): + """Informações complementares das operações de saída de mercadorias sujeitas à + substituição tributária.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c185" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c185" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_ITEM": 0, # Número sequencial do item no documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "CST_ICMS": 0, # Código da Situação Tributária referente ao ICMS + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "COD_MOT_REST_COMPL": 0, # Código do motivo da restituição ou comple... + # "QUANT_CONV": 0, # Quantidade do item + # "UNID": 0, # Unidade adotada para informar o campo QUANT_CONV. + # "VL_UNIT_CONV": 0, # Valor unitário da mercadoria, considerando a un... + # "VL_UNIT_ICMS_NA_OPERACAO_CONV": 0, # Valor unitário para o ICMS na ... + # "VL_UNIT_ICMS_OP_CONV": 0, # Valor unitário do ICMS OP calculado con... + # "VL_UNIT_ICMS_OP_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS qu... + # "VL_UNIT_ICMS_ST_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS/ST... + # "VL_UNIT_ICMS_ST_": 0, # Valor unitário do total do ICMS/ST, incluin... + # "VL_UNIT_FCP_ST_CONV_REST": 0, # Valor unitário correspondente à par... + # "VL_UNIT_ICMS_ST_CONV_COMPL": 0, # Valor unitário do complemento do ... + # "VL_UNIT_FCP_ST_CONV_COMPL": 0, # Valor unitário correspondente à pa... + # } + + +class RegistroC186(models.Model): + """Informações complementares das operações de devolução de entradas de mercadorias + sujeitas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c186" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c186" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_ITEM": 0, # Número sequencial do item no documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "CST_ICMS": 0, # Código da Situação Tributária referente ao ICMS + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "COD_MOT_REST_COMPL": 0, # Código do motivo da restituição ou comple... + # "QUANT_CONV": 0, # Quantidade do item + # "UNID": 0, # Unidade adotada para informar o campo QUANT_CONV. + # "COD_MOD_ENTRADA": 0, # Código do modelo do documento fiscal de saíd... + # "SERIE_ENTRADA": 0, # Número de série do documento de entrada em pap... + # "NUM_DOC_ENTRADA": 0, # Número do documento fiscal de entrada + # "CHV_DFE_ENTRADA": 0, # Chave do documento fiscal eletrônico de entr... + # "DT_DOC_ENTRADA": 0, # Data da emissão do documento fiscal de entrad... + # "NUM_ITEM_ENTRADA": 0, # Item do documento fiscal de entrada + # "VL_UNIT_CONV_ENTRADA": 0, # Valor unitário da mercadoria, considera... + # "VL_UNIT_ICMS_OP_CONV_ENTRADA": 0, # Valor unitário do ICMS correspo... + # "VL_UNIT_ICMS_ST_CONV_ENTRADA": 0, # Valor unitário do imposto pago ... + # "VL_UNIT_FCP_ST_CONV_ENTRADA": 0, # Valor unitário do FCP_ST, corres... + # } + + +class RegistroC190(models.Model): + """Registro Analítico do Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c190" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c190" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação do agrupamento de... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da operação na combinação de CST_ICMS, CFOP e a... + # "VL_BC_ICMS": 0, # Parcela correspondente ao "Valor da base de cálcu... + # "VL_ICMS": 0, # Parcela correspondente ao "Valor do ICMS", incluindo... + # "VL_BC_ICMS_ST": 0, # Parcela correspondente ao "Valor da base de cá... + # "VL_ICMS_ST": 0, # Parcela correspondente ao valor creditado/debitad... + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "VL_IPI": 0, # Parcela correspondente ao "Valor do IPI" referente à ... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroC191(models.Model): + """Informações do Fundo de Combate à Pobreza – FCP – na NF-e.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c191" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c191" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_FCP_OP": 0, # Valor do Fundo de Combate à Pobreza (FCP) vinculad... + # "VL_FCP_ST": 0, # Valor do Fundo de Combate à Pobreza (FCP) vinculad... + # "VL_FCP_RET": 0, # Valor relativo ao Fundo de Combate à Pobreza (FCP... + # } + + +class RegistroC195(models.Model): + """Complemento do Registro Analítico.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c195" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c195" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # "TXT_COMPL": 0, # Descrição complementar do código de observação + # } + + +class RegistroC197(models.Model): + """Outras Obrigações Tributárias.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c197" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c197" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_AJ": 0, # Código do ajustes/benefício/incentivo, conforme tabel... + # "DESCR_COMPL_AJ": 0, # Descrição complementar do ajuste do documento... + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_BC_ICMS": 0, # Base de cálculo do ICMS ou do ICMS ST + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_ICMS": 0, # Valor do ICMS ou do ICMS ST + # "VL_OUTROS": 0, # Outros valores + # } + + +class RegistroC300(models.Model): + """Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c300" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c300" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC_INI": 0, # Número do documento fiscal inicial + # "NUM_DOC_FIN": 0, # Número do documento fiscal final + # "DT_DOC": 0, # Data da emissão dos documentos fiscais + # "VL_DOC": 0, # Valor total dos documentos + # "VL_PIS": 0, # Valor total do PIS + # "VL_COFINS": 0, # Valor total da COFINS + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # } + + +class RegistroC310(models.Model): + """Documentos Cancelados de Nota Fiscal de Venda a Consumidor.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c310" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c310" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_DOC_CANC": 0, # Número do documento fiscal cancelado + # } + + +class RegistroC320(models.Model): + """Registro Analítico das Notas Fiscais de Venda a Consumidor.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c320" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c320" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor total acumulado das operações correspondentes à... + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS, refer... + # "VL_ICMS": 0, # Valor acumulado do ICMS, referente à combinação de C... + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroC321(models.Model): + """Itens dos Resumos Diários dos Documentos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c321" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c321" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "QTD": 0, # Quantidade acumulada do item + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor acumulado do item + # "VL_DESC": 0, # Valor do desconto acumulado + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor acumulado do ICMS debitado + # "VL_PIS": 0, # Valor acumulado do PIS + # "VL_COFINS": 0, # Valor acumulado da COFINS + # } + + +class RegistroC330(models.Model): + """Informações complementares das operações de saída de mercadorias sujeitas à + substituição tributária.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c330" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c330" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOT_REST_COMPL": 0, # Código do motivo da restituição ou comple... + # "QUANT_CONV": 0, # Quantidade do item + # "UNID": 0, # Unidade adotada para informar o campo QUANT_CONV. + # "VL_UNIT_CONV": 0, # Valor unitário da mercadoria, considerando a un... + # "VL_UNIT_ICMS_NA_OPERACAO_CONV": 0, # Valor unitário para o ICMS na ... + # "VL_UNIT_ICMS_OP_CONV": 0, # Valor unitário do ICMS OP calculado con... + # "VL_UNIT_ICMS_OP_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS qu... + # "VL_UNIT_ICMS_ST_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS/ST... + # "VL_UNIT_ICMS_ST_CONV_REST": 0, # Valor unitário do total do ICMS/ST... + # "VL_UNIT_FCP_ST_CONV_REST": 0, # Valor unitário correspondente à par... + # "VL_UNIT_ICMS_ST_CONV_COMPL": 0, # Valor unitário do complemento do ... + # "VL_UNIT_FCP_ST_CONV_COMPL": 0, # Valor unitário correspondente à pa... + # } + + +class RegistroC350(models.Model): + """Nota Fiscal de venda a consumidor.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c350" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c350" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "SER": 0, # Série do documento fiscal + # "SUB_SER": 0, # Subsérie do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "CNPJ_CPF": 0, # CNPJ ou CPF do destinatário + # "VL_MERC": 0, # Valor das mercadorias constantes no documento fiscal + # "VL_DOC": 0, # Valor total do documento fiscal + # "VL_DESC": 0, # Valor total do desconto + # "VL_PIS": 0, # Valor total do PIS + # "VL_COFINS": 0, # Valor total da COFINS + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # } + + +class RegistroC370(models.Model): + """Itens do documento (código 02).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c370" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c370" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_ITEM": 0, # Número sequencialdo item no documento fiscal + # "COD_ITEM": 0, # Código do Item (campo 02 do registro 0200) + # "QTD": 0, # Quantidade do item + # "UNID": 0, # Unidade do item (campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor total do item + # "VL_DESC": 0, # Valor total do desconto no item + # } + + +class RegistroC380(models.Model): + """Informações complementares das operações de saída de mercadorias sujeitas à + substituição tributária.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c380" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c380" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOT_REST_COMPL": 0, # Código do motivo da restituição ou comple... + # "QUANT_CONV": 0, # Quantidade do item + # "UNID": 0, # Unidade adotada para informar o campo QUANT_CONV. + # "VL_UNIT_CONV": 0, # Valor unitário da mercadoria, considerando a un... + # "VL_UNIT_ICMS_NA_OPERACAO_CONV": 0, # Valor unitário para o ICMS na ... + # "VL_UNIT_ICMS_OP_CONV": 0, # Valor unitário do ICMS OP calculado con... + # "VL_UNIT_ICMS_OP_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS qu... + # "VL_UNIT_ICMS_ST_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS/ST... + # "VL_UNIT_ICMS_ST_CONV_REST": 0, # Valor unitário do total do ICMS/ST... + # "VL_UNIT_FCP_ST_CONV_REST": 0, # Valor unitário correspondente à par... + # "VL_UNIT_ICMS_ST_CONV_COMPL": 0, # Valor unitário do complemento do ... + # "VL_UNIT_FCP_ST_CONV_COMPL": 0, # Valor unitário correspondente à pa... + # "CST_ICMS": 0, # Código da Situação Tributária referente ao ICMS + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # } + + +class RegistroC390(models.Model): + """Registro Analítico das Notas Fiscais de Venda a Consumidor.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c390" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c390" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor total acumulado das operações correspondentes à... + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS, refer... + # "VL_ICMS": 0, # Valor acumulado do ICMS, referente à combinação de C... + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroC400(models.Model): + """Equipamento ECF (código 02, 2D e 60).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c400" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c400" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "ECF_MOD": 0, # Modelo do equipamento + # "ECF_FAB": 0, # Número de série de fabricação do ECF + # "ECF_CX": 0, # Número do caixa atribuído ao ECF + # } + + +class RegistroC405(models.Model): + """Redução Z (código 02, 2D e 60).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c405" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c405" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_DOC": 0, # Data do movimento a que se refere a Redução Z + # "CRO": 0, # Posição do Contador de Reinício de Operação + # "CRZ": 0, # Posição do Contador de Redução Z + # "NUM_COO_FIN": 0, # Número do Contador de Ordem de Operação do últim... + # "GT_FIN": 0, # Valor do Grande Total final + # "VL_BRT": 0, # Valor da venda bruta + # } + + +class RegistroC410(models.Model): + """PIS e COFINS Totalizados no Dia.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c410" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c410" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_PIS": 0, # Valor total do PIS + # "VL_COFINS": 0, # Valor total da COFINS + # } + + +class RegistroC420(models.Model): + """Registro dos Totalizadores Parciais da Redução Z.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c420" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c420" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_TOT_PAR": 0, # Código do totalizador, conforme tabela 4.4.6 + # "VLR_ACUM_TOT": 0, # Valor acumulado no totalizador, relativo à resp... + # "NR_TOT": 0, # Número do totalizador quando ocorrer mais de uma situ... + # "DESCR_NR_TOT": 0, # Descrição da situação tributária relativa ao to... + # } + + +class RegistroC425(models.Model): + """Resumo de itens do movimento diário.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c425" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c425" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "QTD": 0, # Quantidade acumulada do item + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor acumulado do item + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # } + + +class RegistroC430(models.Model): + """Informações complementares das operações de saída de mercadorias sujeitas à + substituição tributária.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c430" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c430" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOT_REST_COMPL": 0, # Código do motivo da restituição ou comple... + # "QUANT_CONV": 0, # Quantidade do item + # "UNID": 0, # Unidade adotada para informar o campo QUANT_CONV. + # "VL_UNIT_CONV": 0, # Valor unitário da mercadoria, considerando a un... + # "VL_UNIT_ICMS_NA_OPERACAO_CONV": 0, # Valor unitário para o ICMS na ... + # "VL_UNIT_ICMS_OP_CONV": 0, # Valor unitário do ICMS OP calculado con... + # "VL_UNIT_ICMS_OP_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS qu... + # "VL_UNIT_ICMS_ST_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS/ST... + # "VL_UNIT_ICMS_ST_CONV_REST": 0, # Valor unitário do total do ICMS ST... + # "VL_UNIT_FCP_ST_CONV_REST": 0, # Valor unitário correspondente à par... + # "VL_UNIT_ICMS_ST_CONV_COMPL": 0, # Valor unitário do complemento do ... + # "VL_UNIT_FCP_ST_CONV_COMPL": 0, # Valor unitário correspondente à pa... + # "CST_ICMS": 0, # Código da Situação Tributária referente ao ICMS + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # } + + +class RegistroC460(models.Model): + """Documento Fiscal Emitido por ECF.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c460" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c460" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "COD_SIT": 0, # Código da situação do documento fiscal, conforme a t... + # "NUM_DOC": 0, # Número do documento fiscal (COO) + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "VL_DOC": 0, # Valor total do documento fiscal + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # "CPF_CNPJ": 0, # CPF ou CNPJ do adquirente + # "NOM_ADQ": 0, # Nome do adquirente + # } + + +class RegistroC465(models.Model): + """Complemento do Cupom Fiscal Eletrônico Emitido por ECF – CF-e-ECF.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c465" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c465" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CHV_CFE": 0, # Chave do Cupom Fiscal Eletrônico + # "NUM_CCF": 0, # Número do Contador de Cupom Fiscal + # } + + +class RegistroC470(models.Model): + """Itens do Documento Fiscal Emitido por ECF.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c470" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c470" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "QTD": 0, # Quantidade do item + # "QTD_CANC": 0, # Quantidade cancelada, no caso de cancelamento parci... + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor do item + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "ALIQ_ICMS": 0, # Alíquota do ICMS - Carga tributária efetiva em per... + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # } + + +class RegistroC480(models.Model): + """Informações complementares das operações de saída de mercadorias sujeitas à + substituição tributária.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c480" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c480" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOT_REST_COMPL": 0, # Código do motivo da restituição ou comple... + # "QUANT_CONV": 0, # Quantidade do item + # "UNID": 0, # Unidade adotada para informar o campo QUANT_CONV. + # "VL_UNIT_CONV": 0, # Valor unitário da mercadoria, considerando a un... + # "VL_UNIT_ICMS_NA_OPERACAO_CONV": 0, # Valor unitário para o ICMS na ... + # "VL_UNIT_ICMS_OP_CONV": 0, # Valor unitário do ICMS OP calculado con... + # "VL_UNIT_ICMS_OP_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS qu... + # "VL_UNIT_ICMS_ST_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS/ST... + # "VL_UNIT_ICMS_ST_CONV_REST": 0, # Valor unitário do total do ICMS/ST... + # "VL_UNIT_FCP_ST_CONV_REST": 0, # Valor unitário correspondente à par... + # "VL_UNIT_ICMS_ST_CONV_COMPL": 0, # Valor unitário do complemento do ... + # "VL_UNIT_FCP_ST_CONV_COMPL": 0, # Valor unitário correspondente à pa... + # "CST_ICMS": 0, # Código da Situação Tributária referente ao ICMS + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # } + + +class RegistroC490(models.Model): + """Registro Analítico do movimento diário.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c490" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c490" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da operação correspondente à combinação de CST_... + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS, refer... + # "VL_ICMS": 0, # Valor acumulado do ICMS, referente à combinação de C... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroC495(models.Model): + """Resumo Mensal de Itens do ECF por Estabelecimento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c495" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c495" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "QTD": 0, # Quantidade acumulada do item + # "QTD_CANC": 0, # Quantidade cancelada acumulada, no caso de cancelam... + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor acumulado do item + # "VL_DESC": 0, # Valor acumulado dos descontos + # "VL_CANC": 0, # Valor acumulado dos cancelamentos + # "VL_ACMO": 0, # Valor acumulado dos acréscimos + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor acumulado do ICMS + # "VL_ISEN": 0, # Valor das saídas isentas do ICMS + # "VL_NT": 0, # Valor das saídas sob não-incidência ou não-tributadas ... + # "VL_ICMS_ST": 0, # Valor das saídas de mercadorias adquiridas com su... + # } + + +class RegistroC500(models.Model): + """Nota Fiscal/Conta de Energia Elétrica.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c500" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c500" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_OPER": 0, # Indicador do tipo de operação: 0 - Entrada 1 - Saíd... + # "IND_EMIT": 0, # Indicador do emitente do documento fiscal: 0 - Emis... + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "COD_SIT": 0, # Código da situação do documento fiscal, conforme a t... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "COD_CONS": 0, # - Código de classe de consumo de energia elétrica o... + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "DT_E_S": 0, # Data da entrada ou da saída + # "VL_DOC": 0, # Valor total do documento fiscal + # "VL_DESC": 0, # Valor total do desconto + # "VL_FORN": 0, # Valor total fornecido/consumido + # "VL_SERV_NT": 0, # Valor total dos serviços não-tributados pelo ICMS + # "VL_TERC": 0, # Valor total cobrado em nome de terceiros + # "VL_DA": 0, # Valor total de despesas acessórias indicadas no docume... + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor acumulado do ICMS + # "VL_BC_ICMS_ST": 0, # Valor acumulado da base de cálculo do ICMS sub... + # "VL_ICMS_ST": 0, # Valor acumulado do ICMS retido por substituição t... + # "COD_INF": 0, # Código da informação complementar do documento fisca... + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # "TP_LIGACAO": 0, # Código de tipo de Ligação 1 - Monofásico 2 - Bifá... + # "COD_GRUPO_TENSAO": 0, # Código de grupo de tensão: 01 - A1 - Alta T... + # "CHV_DOCE": 0, # Chave da Nota Fiscal de Energia Elétrica Eletrônica + # "FIN_DOCE": 0, # Finalidade da emissão do documento eletrônico: 1 – ... + # "CHV_DOCE_REF": 0, # Chave da nota referenciada, substituída. + # "IND_DEST": 0, # Indicador do Destinatário/Acessante: 1 – Contribuin... + # "COD_MUN_DEST": 0, # Código do município do destinatário conforme a ... + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # "COD_MOD_DOC_REF": 0, # Código do modelo do documento fiscal referen... + # "HASH_DOC_REF": 0, # Código de autenticação digital do registro (Con... + # "SER_DOC_REF": 0, # Série do documento fiscal referenciado. + # "NUM_DOC_REF": 0, # Número do documento fiscal referenciado. + # "MES_DOC_REF": 0, # Mês e ano da emissão do documento fiscal referen... + # "ENER_INJET": 0, # Energia injetada + # "OUTRAS_DED": 0, # Outras deduções + # } + + +class RegistroC510(models.Model): + """Itens do Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c510" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c510" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_ITEM": 0, # Número sequencial do item no documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "COD_CLASS": 0, # Código de classificação do item de energia elétric... + # "QTD": 0, # Quantidade do item + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor do item + # "VL_DESC": 0, # Valor total do desconto + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "VL_BC_ICMS": 0, # Valor da base de cálculo do ICMS + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_ICMS": 0, # Valor do ICMS creditado/debitado + # "VL_BC_ICMS_ST": 0, # Valor da base de cálculo referente à substitui... + # "ALIQ_ST": 0, # Alíquota do ICMS da substituição tributária na unida... + # "VL_ICMS_ST": 0, # Valor do ICMS referente à substituição tributária + # "IND_REC": 0, # Indicador do tipo de receita: 0- Receita própria 1- ... + # "COD_PART": 0, # Código do participante receptor da receita, terceir... + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # } + + +class RegistroC590(models.Model): + """Registro Analítico do Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c590" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c590" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação do agrupamento de... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da operação correspondente à combinação de CST_... + # "VL_BC_ICMS": 0, # Parcela correspondente ao “Valor da base de cálcu... + # "VL_ICMS": 0, # Parcela correspondente ao "Valor do ICMS" referente ... + # "VL_BC_ICMS_ST": 0, # Parcela correspondente ao "Valor da base de cá... + # "VL_ICMS_ST": 0, # Parcela correspondente ao valor creditado/debitad... + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroC591(models.Model): + """Informações do Fundo de Combate à Pobreza – FCP na NF3e.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c591" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c591" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_FCP_OP": 0, # Valor do Fundo de Combate à Pobreza (FCP) vinculad... + # "VL_FCP_ST": 0, # Valor do Fundo de Combate à Pobreza (FCP) vinculad... + # } + + +class RegistroC595(models.Model): + """Observações do Lançamento Fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c595" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c595" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # "TXT_COMPL": 0, # Descrição complementar do código de observação. + # } + + +class RegistroC597(models.Model): + """Outras obrigações tributárias.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c597" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c597" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_AJ": 0, # Código do ajustes/benefício/incentivo, conforme tabel... + # "DESCR_COMPL_AJ": 0, # Descrição complementar do ajuste do documento... + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_BC_ICMS": 0, # Base de cálculo do ICMS ou do ICMS ST + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_ICMS": 0, # Valor do ICMS ou do ICMS ST + # "VL_OUTROS": 0, # Outros valores + # } + + +class RegistroC600(models.Model): + """Consolidação Diária de Notas Fiscais/Contas de Energia Elétrica.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c600" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c600" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "COD_MUN": 0, # Código do município dos pontos de consumo, conforme ... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "COD_CONS": 0, # - Código de classe de consumo de energia elétrica o... + # "QTD_CONS": 0, # Quantidade de documentos consolidados neste registr... + # "QTD_CANC": 0, # Quantidade de documentos cancelados + # "DT_DOC": 0, # Data dos documentos consolidados + # "VL_DOC": 0, # Valor total dos documentos + # "VL_DESC": 0, # Valor acumulado dos descontos + # "CONS": 0, # Consumo total acumulado, em kWh (Código 06) + # "VL_FORN": 0, # Valor acumulado do fornecimento + # "VL_SERV_NT": 0, # Valor acumulado dos serviços não-tributados pelo ... + # "VL_TERC": 0, # Valores cobrados em nome de terceiros + # "VL_DA": 0, # Valor acumulado das despesas acessórias + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor acumulado do ICMS + # "VL_BC_ICMS_ST": 0, # Valor acumulado da base de cálculo do ICMS sub... + # "VL_ICMS_ST": 0, # Valor acumulado do ICMS retido por substituição t... + # "VL_PIS": 0, # Valor acumulado do PIS + # "VL_COFINS": 0, # Valor acumulado COFINS + # } + + +class RegistroC601(models.Model): + """Documentos cancelados.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c601" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c601" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_DOC_CANC": 0, # Número do documento fiscal cancelado + # } + + +class RegistroC610(models.Model): + """Itens do Documento Consolidado.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c610" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c610" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_CLASS": 0, # Código de classificação do item de energia elétric... + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "QTD": 0, # Quantidade acumulada do item + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor acumulado do item + # "VL_DESC": 0, # Valor acumulado dos descontos + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação conforme tabela i... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor acumulado do ICMS debitado + # "VL_BC_ICMS_ST": 0, # Valor da base de cálculo do ICMS substituição ... + # "VL_ICMS_ST": 0, # Valor do ICMS retido por substituição tributária + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # } + + +class RegistroC690(models.Model): + """Registro Analítico dos Documentos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c690" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c690" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação, conforme a tabel... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da operação correspondente à combinação de CST_... + # "VL_BC_ICMS": 0, # Parcela correspondente ao "Valor da base de cálcu... + # "VL_ICMS": 0, # Parcela correspondente ao "Valor do ICMS" referente ... + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "VL_BC_ICMS_ST": 0, # Valor da base de cálculo do ICMS substituição ... + # "VL_ICMS_ST": 0, # Valor do ICMS retido por substituição tributária + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroC700(models.Model): + """Consolidação dos Documentos Nota Fiscal/Conta Energia Elétrica.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c700" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c700" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "NRO_ORD_INI": 0, # Número de ordem inicial + # "NRO_ORD_FIN": 0, # Número de ordem final + # "DT_DOC_INI": 0, # Data de emissão inicial dos documentos / Data ini... + # "DT_DOC_FIN": 0, # Data de emissão final dos documentos / Data final... + # "NOM_MEST": 0, # Nome do arquivo Mestre de Documento Fiscal + # "CHV_COD_DIG": 0, # Chave de codificação digital do arquivo Mestre d... + # } + + +class RegistroC790(models.Model): + """Registro Analítico dos Documentos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c790" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c790" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação, conforme a tabel... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da operação correspondente à combinação de CST_... + # "VL_BC_ICMS": 0, # Parcela correspondente ao "Valor da base de cálcu... + # "VL_ICMS": 0, # Parcela correspondente ao "Valor do ICMS" referente ... + # "VL_BC_ICMS_ST": 0, # Valor da base de cálculo do ICMS substituição ... + # "VL_ICMS_ST": 0, # Valor do ICMS retido por substituição tributária + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroC791(models.Model): + """Registro de Informações de ICMS ST por UF.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c791" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c791" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "UF": 0, # Sigla da unidade da federação a que se refere a retenção ... + # "VL_BC_ICMS_ST": 0, # Valor da base de cálculo do ICMS substituição ... + # "VL_ICMS_ST": 0, # Valor do ICMS retido por substituição tributária + # } + + +class RegistroC800(models.Model): + """Registro Cupom Fiscal Eletrônico.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c800" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c800" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "COD_SIT": 0, # Código da situação do documento fiscal, conforme a t... + # "NUM_CFE": 0, # Número do Cupom Fiscal Eletrônico + # "DT_DOC": 0, # Data da emissão do Cupom Fiscal Eletrônico + # "VL_CFE": 0, # Valor total do Cupom Fiscal Eletrônico + # "VL_PIS": 0, # Valor total do PIS + # "VL_COFINS": 0, # Valor total da COFINS + # "CNPJ_CPF": 0, # CNPJ ou CPF do destinatário + # "NR_SAT": 0, # Número de Série do equipamento SAT + # "CHV_CFE": 0, # Chave do Cupom Fiscal Eletrônico + # "VL_DESC": 0, # Valor total de descontos + # "VL_MERC": 0, # Valor total das mercadorias e serviços + # "VL_OUT_DA": 0, # Valor total de outras despesas acessórias e acrésc... + # "VL_ICMS": 0, # Valor do ICMS + # "VL_PIS_ST": 0, # Valor total do PIS retido por subst. trib. + # "VL_COFINS_ST": 0, # Valor total da COFINS retido por subst. trib. + # } + + +class RegistroC810(models.Model): + """Itens do documento do cupom fiscal eletrônico – SAT.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c810" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c810" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_ITEM": 0, # Número do item no documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "QTD": 0, # Quantidade do item + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor total do item (mercadorias ou serviços) + # "CST_ICMS": 0, # Código da Situação Tributária referente ao ICMS + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # } + + +class RegistroC815(models.Model): + """Informações complementares das operações de saída de mercadorias sujeitas à + substituição tributária.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c815" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c815" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOT_REST_COMPL": 0, # Código do motivo da restituição ou comple... + # "QUANT_CONV": 0, # Quantidade do item + # "UNID": 0, # Unidade adotada para informar o campo QUANT_CONV. + # "VL_UNIT_CONV": 0, # Valor unitário da mercadoria, considerando a un... + # "VL_UNIT_ICMS_NA_OPERACAO_CONV": 0, # Valor unitário para o ICMS na ... + # "VL_UNIT_ICMS_OP_CONV": 0, # Valor unitário do ICMS OP calculado con... + # "VL_UNIT_ICMS_OP_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS qu... + # "VL_UNIT_ICMS_ST_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS/ST... + # "VL_UNIT_ICMS_ST_CONV_REST": 0, # Valor unitário do total do ICMS/ST... + # "VL_UNIT_FCP_ST_CONV_REST": 0, # Valor unitário correspondente à par... + # "VL_UNIT_ICMS_ST_CONV_COMPL": 0, # Valor unitário do complemento do ... + # "VL_UNIT_FCP_ST_CONV_COMPL": 0, # Valor unitário correspondente à pa... + # } + + +class RegistroC850(models.Model): + """Registro Analítico do CF-e-SAT.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c850" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c850" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a Tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação do agrupamento de... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # “Valor total do CF-e” na combinação de CST_ICMS, CFOP... + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS, refer... + # "VL_ICMS": 0, # Parcela correspondente ao “Valor do ICMS” referente ... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroC855(models.Model): + """Observações do lançamento fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c855" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c855" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # "TXT_COMPL": 0, # Descrição complementar do código de observação + # } + + +class RegistroC857(models.Model): + """Outras obrigações tributárias.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c857" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c857" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_AJ": 0, # Código do ajustes/benefício/incentivo, conforme tabel... + # "DESCR_COMPL_AJ": 0, # Descrição complementar do ajuste do documento... + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_BC_ICMS": 0, # Base de cálculo do ICMS ou do ICMS ST + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_ICMS": 0, # Valor do ICMS ou do ICMS ST + # } + + +class RegistroC860(models.Model): + """Identificação do equipamento SAT-CF-e.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c860" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c860" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "NR_SAT": 0, # Número de Série do equipamento SAT + # "DT_DOC": 0, # Data de emissão dos documentos fiscais + # "DOC_INI": 0, # Número do documento inicial + # "DOC_FIM": 0, # Número do documento final + # } + + +class RegistroC870(models.Model): + """Itens do documento do cupom fiscal eletrônico – SAT.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c870" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c870" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "QTD": 0, # Quantidade do item + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "CST_ICMS": 0, # Código da Situação Tributária referente ao ICMS + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # } + + +class RegistroC880(models.Model): + """Informações complementares das operações de saída de mercadorias sujeitas à + substituição tributária.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c880" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c880" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOT_REST_COMPL": 0, # Código do motivo da restituição ou comple... + # "QUANT_CONV": 0, # Quantidade do item + # "UNID": 0, # Unidade adotada para informar o campo QUANT_CONV. + # "VL_UNIT_CONV": 0, # Valor unitário da mercadoria, considerando a un... + # "VL_UNIT_ICMS_NA_OPERACAO_CONV": 0, # Valor unitário para o ICMS na ... + # "VL_UNIT_ICMS_OP_CONV": 0, # Valor unitário do ICMS OP calculado con... + # "VL_UNIT_ICMS_OP_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS qu... + # "VL_UNIT_ICMS_ST_ESTOQUE_CONV": 0, # Valor médio unitário do ICMS/ST... + # "VL_UNIT_ICMS_ST_CONV_REST": 0, # Valor unitário do total do ICMS ST... + # "VL_UNIT_FCP_ST_CONV_REST": 0, # Valor unitário correspondente à par... + # "VL_UNIT_ICMS_ST_CONV_COMPL": 0, # Valor unitário do complemento do ... + # "VL_UNIT_FCP_ST_CONV_COMPL": 0, # Valor unitário correspondente à pa... + # } + + +class RegistroC890(models.Model): + """Resumo diário de CF-e- SAT.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c890" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c890" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação do agrupamento de... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # “Valor total do CF-e” na combinação de CST_ICMS, CFOP... + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS, refer... + # "VL_ICMS": 0, # Parcela correspondente ao "Valor do ICMS" referente ... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroC895(models.Model): + """Observações do lançamento fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c895" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c895" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # "TXT_COMPL": 0, # Descrição complementar do código de observação + # } + + +class RegistroC897(models.Model): + """Outras obrigações tributárias.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.c897" + _inherit = "l10n_br_sped.efd_icms_ipi.20.c897" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_AJ": 0, # Código do ajustes/benefício/incentivo, conforme tabel... + # "DESCR_COMPL_AJ": 0, # Descrição complementar do ajuste do documento... + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_BC_ICMS": 0, # Base de cálculo do ICMS ou do ICMS ST + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_ICMS": 0, # Valor do ICMS ou do ICMS ST + # "VL_OUTROS": 0, # Outros valores + # } + + +class RegistroD100(models.Model): + """Registro D100- Nota Fiscal de Serviço de Transporte.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d100" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d100" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_OPER": 0, # Indicador do tipo de operação: 0- Aquisição 1- Pres... + # "IND_EMIT": 0, # Indicador do emitente do documento fiscal: 0- Emiss... + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "COD_SIT": 0, # Código da situação do documento fiscal, conforme a t... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "CHV_CTE": 0, # Chave do Conhecimento de Transporte Eletrônico ou do... + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "DT_A_P": 0, # Data da aquisição ou da prestação do serviço + # "TP_CT_E": 0, # Tipo de Conhecimento de Transporte Eletrônico confor... + # "CHV_CTE_REF": 0, # Chave do Documento Eletrônico Substituído + # "VL_DOC": 0, # Valor total do documento fiscal + # "VL_DESC": 0, # Valor total do desconto + # "IND_FRT": 0, # Indicador do tipo do frete: 0- Por conta do emitente... + # "VL_SERV": 0, # Valor total da prestação de serviço + # "VL_BC_ICMS": 0, # Valor da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor do ICMS + # "VL_NT": 0, # Valor não-tributado + # "COD_INF": 0, # Código da informação complementar do documento fisca... + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # "COD_MUN_ORIG": 0, # Código do município de origem do serviço, confo... + # "COD_MUN_DEST": 0, # Código do município de destino, conforme a tabe... + # } + + +class RegistroD110(models.Model): + """Itens do documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d110" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d110" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_ITEM": 0, # Número sequencial do item no documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_SERV": 0, # Valor do serviço + # "VL_OUT": 0, # Outros valores + # } + + +class RegistroD120(models.Model): + """Complemento da Nota Fiscal de Serviços de Transporte.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d120" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d120" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MUN_ORIG": 0, # Código do município de origem do serviço, confo... + # "COD_MUN_DEST": 0, # Código do município de destino, conforme a tabe... + # "VEIC_ID": 0, # Placa de identificação do veículo + # "UF_ID": 0, # Sigla da UF da placa do veículo + # } + + +class RegistroD130(models.Model): + """Complemento do Conhecimento Rodoviário de Cargas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d130" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d130" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART_CONSG": 0, # Código do participante (campo 02 do Registro ... + # "COD_PART_RED": 0, # Código do participante (campo 02 do Registro 01... + # "IND_FRT_RED": 0, # Indicador do tipo do frete da operação de redesp... + # "COD_MUN_ORIG": 0, # Código do município de origem do serviço, confo... + # "COD_MUN_DEST": 0, # Código do município de destino, conforme a tabe... + # "VEIC_ID": 0, # Placa de identificação do veículo + # "VL_LIQ_FRT": 0, # Valor líquido do frete + # "VL_SEC_CAT": 0, # Soma de valores de Sec/Cat (serviços de coleta/cu... + # "VL_DESP": 0, # Soma de valores de despacho + # "VL_PEDG": 0, # Soma dos valores de pedágio + # "VL_OUT": 0, # Outros valores + # "VL_FRT": 0, # Valor total do frete + # "UF_ID": 0, # Sigla da UF da placa do veículo + # } + + +class RegistroD140(models.Model): + """Complemento do Conhecimento Aquaviário de Cargas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d140" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d140" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART_CONSG": 0, # Código do participante (campo 02 do Registro ... + # "COD_MUN_ORIG": 0, # Código do município de origem do serviço, confo... + # "COD_MUN_DEST": 0, # Código do município de destino, conforme a tabe... + # "IND_VEIC": 0, # Indicador do tipo do veículo transportador: 0 - Emb... + # "VEIC_ID": 0, # Identificação da embarcação (IRIM ou Registro CPP) + # "IND_NAV": 0, # Indicador do tipo da navegação: + # "VIAGEM": 0, # Número da viagem + # "VL_FRT_LIQ": 0, # Valor líquido do frete + # "VL_DESP_PORT": 0, # Valor das despesas portuárias + # "VL_DESP_CAR_DESC": 0, # Valor das despesas com carga e descarga + # "VL_OUT": 0, # Outros valores + # "VL_FRT_BRT": 0, # Valor bruto do frete + # "VL_FRT_MM": 0, # Valor adicional do frete para renovação da Marinha... + # } + + +class RegistroD150(models.Model): + """Complemento do Conhecimento Aéreo de Cargas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d150" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d150" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MUN_ORIG": 0, # Código do município de origem do serviço, confo... + # "COD_MUN_DEST": 0, # Código do município de destino, conforme a tabe... + # "VEIC_ID": 0, # Identificação da aeronave (DAC) + # "VIAGEM": 0, # Número do vôo + # "IND_TFA": 0, # Indicador do tipo de tarifa aplicada: 0- Exp. 1- Enc... + # "VL_PESO_TX": 0, # Peso taxado + # "VL_TX_TERR": 0, # Valor da taxa terrestre + # "VL_TX_RED": 0, # Valor da taxa de redespacho + # "VL_OUT": 0, # Outros valores + # "VL_TX_ADV": 0, # Valor da taxa "ad valorem" + # } + + +class RegistroD160(models.Model): + """Carga Transportada.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d160" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d160" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DESPACHO": 0, # Identificação do número do despacho + # "CNPJ_CPF_REM": 0, # CNPJ ou CPF do remetente das mercadorias que co... + # "IE_REM": 0, # Inscrição Estadual do remetente das mercadorias que c... + # "COD_MUN_ORI": 0, # Código do Município de origem, conforme tabela I... + # "CNPJ_CPF_DEST": 0, # CNPJ ou CPF do destinatário das mercadorias qu... + # "IE_DEST": 0, # Inscrição Estadual do destinatário das mercadorias q... + # "COD_MUN_DEST": 0, # Código do Município de destino, conforme tabela... + # } + + +class RegistroD161(models.Model): + """Local de Coleta e Entrega.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d161" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d161" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_CARGA": 0, # Indicador do tipo de transporte da carga coletada:... + # "CNPJ_CPF_COL": 0, # Número do CNPJ ou CPF do local da coleta + # "IE_COL": 0, # Inscrição Estadual do contribuinte do local de coleta + # "COD_MUN_COL": 0, # Código do Município do local de coleta, conforme... + # "CNPJ_CPF_ENTG": 0, # Número do CNPJ ou CPF do local da entrega + # "IE_ENTG": 0, # Inscrição Estadual do contribuinte do local de entre... + # "COD_MUN_ENTG": 0, # Código do Município do local de entrega, confor... + # } + + +class RegistroD162(models.Model): + """Identificação dos documentos fiscais.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d162" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d162" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "VL_DOC": 0, # Valor total do documento fiscal + # "VL_MERC": 0, # Valor das mercadorias constantes no documento fiscal + # "QTD_VOL": 0, # Quantidade de volumes transportados + # "PESO_BRT": 0, # Peso bruto dos volumes transportados (em kg) + # "PESO_LIQ": 0, # Peso líquido dos volumes transportados (em kg) + # } + + +class RegistroD170(models.Model): + """Complemento do Conhecimento Multimodal de Cargas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d170" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d170" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART_CONSG": 0, # Código do participante (campo 02 do Registro ... + # "COD_PART_RED": 0, # Código do participante (campo 02 do Registro 01... + # "COD_MUN_ORIG": 0, # Código do município de origem do serviço, confo... + # "COD_MUN_DEST": 0, # Código do município de destino, conforme a tabe... + # "OTM": 0, # Registro do operador de transporte multimodal + # "IND_NAT_FRT": 0, # Indicador da natureza do frete: 0- Negociável + # "VL_LIQ_FRT": 0, # Valor líquido do frete + # "VL_GRIS": 0, # Valor do gris (gerenciamento de risco) + # "VL_PDG": 0, # Somatório dos valores de pedágio + # "VL_OUT": 0, # Outros valores + # "VL_FRT": 0, # Valor total do frete + # "VEIC_ID": 0, # Placa de identificação do veículo + # "UF_ID": 0, # Sigla da UF da placa do veículo + # } + + +class RegistroD180(models.Model): + """Modais (código 26).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d180" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d180" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_SEQ": 0, # Número de ordem sequencial do modal + # "IND_EMIT": 0, # Indicador do emitente do documento fiscal: 0 - Emis... + # "CNPJ_CPF_EMIT": 0, # CNPJ ou CPF do participante emitente do modal + # "UF_EMIT": 0, # Sigla da unidade da federação do participante emiten... + # "IE_EMIT": 0, # Inscrição Estadual do participante emitente do modal + # "COD_MUN_ORIG": 0, # Código do município de origem do serviço, confo... + # "CNPJ_CPF_TOM": 0, # CNPJ/CPF do participante tomador do serviço + # "UF_TOM": 0, # Sigla da unidade da federação do participante tomador... + # "IE_TOM": 0, # Inscrição Estadual do participante tomador do serviço + # "COD_MUN_DEST": 0, # Código do município de destino, conforme a tabe... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "VL_DOC": 0, # Valor total do documento fiscal + # } + + +class RegistroD190(models.Model): + """Registro Analítico dos Documentos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d190" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d190" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação, conforme a tabel... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da operação correspondente à combinação de CST_... + # "VL_BC_ICMS": 0, # Parcela correspondente ao "Valor da base de cálcu... + # "VL_ICMS": 0, # Parcela correspondente ao "Valor do ICMS" referente ... + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroD195(models.Model): + """Observações do lançamento fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d195" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d195" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # "TXT_COMPL": 0, # Descrição complementar do código de observação + # } + + +class RegistroD197(models.Model): + """Outras obrigações tributárias.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d197" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d197" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_AJ": 0, # Código do ajustes/benefício/incentivo, conforme tabel... + # "DESCR_COMPL_AJ": 0, # Descrição complementar do ajuste do documento... + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_BC_ICMS": 0, # Base de cálculo do ICMS ou do ICMS ST + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_ICMS": 0, # Valor do ICMS ou do ICMS ST + # "VL_OUTROS": 0, # Outros valores + # } + + +class RegistroD300(models.Model): + """Registro Analítico dos bilhetes consolidados de Passagem Rodoviário.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d300" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d300" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC_INI": 0, # Número do primeiro documento fiscal emitido (mes... + # "NUM_DOC_FIN": 0, # Número do último documento fiscal emitido (mesmo... + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação conforme tabela i... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "DT_DOC": 0, # Data da emissão dos documentos fiscais + # "VL_OPR": 0, # Valor total acumulado das operações correspondentes à... + # "VL_DESC": 0, # Valor total dos descontos + # "VL_SERV": 0, # Valor total da prestação de serviço + # "VL_SEG": 0, # Valor de seguro + # "VL_OUTDESP": 0, # Valor de outras despesas + # "VL_BC_ICMS": 0, # Valor total da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor total do ICMS + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # } + + +class RegistroD301(models.Model): + """Documentos cancelados dos Bilhetes de Passagem Rodoviário.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d301" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d301" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_DOC_CANC": 0, # Número do documento fiscal cancelado + # } + + +class RegistroD310(models.Model): + """Complemento dos Bilhetes.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d310" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d310" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MUN_ORIG": 0, # Código do município de origem do serviço, confo... + # "VL_SERV": 0, # Valor total da prestação de serviço + # "VL_BC_ICMS": 0, # Valor total da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor total do ICMS + # } + + +class RegistroD350(models.Model): + """Equipamento ECF.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d350" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d350" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "ECF_MOD": 0, # Modelo do equipamento + # "ECF_FAB": 0, # Número de série de fabricação do ECF + # "ECF_CX": 0, # Número do caixa atribuído ao ECF + # } + + +class RegistroD355(models.Model): + """Redução Z.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d355" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d355" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_DOC": 0, # Data do movimento a que se refere a Redução Z + # "CRO": 0, # Posição do Contador de Reinício de Operação + # "CRZ": 0, # Posição do Contador de Redução Z + # "NUM_COO_FIN": 0, # Número do Contador de Ordem de Operação do últim... + # "GT_FIN": 0, # Valor do Grande Total final + # "VL_BRT": 0, # Valor da venda bruta + # } + + +class RegistroD360(models.Model): + """PIS E COFINS totalizados no dia.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d360" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d360" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_PIS": 0, # Valor total do PIS + # "VL_COFINS": 0, # Valor total da COFINS + # } + + +class RegistroD365(models.Model): + """Registro dos Totalizadores Parciais da Redução Z.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d365" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d365" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_TOT_PAR": 0, # Código do totalizador, conforme tabela 4.4.6 + # "VLR_ACUM_TOT": 0, # Valor acumulado no totalizador, relativo à resp... + # "NR_TOT": 0, # Número do totalizador quando ocorrer mais de uma situ... + # "DESCR_NR_TOT": 0, # Descrição da situação tributária relativa ao to... + # } + + +class RegistroD370(models.Model): + """Complemento dos documentos informados.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d370" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d370" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MUN_ORIG": 0, # Código do município de origem do serviço, confo... + # "VL_SERV": 0, # Valor total da prestação de serviço + # "QTD_BILH": 0, # Quantidade de bilhetes emitidos + # "VL_BC_ICMS": 0, # Valor total da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor total do ICMS + # } + + +class RegistroD390(models.Model): + """Registro analítico do movimento diário.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d390" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d390" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da operação correspondente à combinação de CST_... + # "VL_BC_ISSQN": 0, # Valor da base de cálculo do ISSQN + # "ALIQ_ISSQN": 0, # Alíquota do ISSQN + # "VL_ISSQN": 0, # Valor do ISSQN + # "VL_BC_ICMS": 0, # Base de cálculo do ICMS acumulada relativa à alíq... + # "VL_ICMS": 0, # Valor do ICMS acumulado relativo à alíquota informad... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroD400(models.Model): + """Resumo do Movimento Diário.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d400" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d400" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "COD_SIT": 0, # Código da situação do documento fiscal, conforme a t... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal resumo. + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "VL_DOC": 0, # Valor total do documento fiscal + # "VL_DESC": 0, # Valor acumulado dos descontos + # "VL_SERV": 0, # Valor acumulado da prestação de serviço + # "VL_BC_ICMS": 0, # Valor total da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor total do ICMS + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # } + + +class RegistroD410(models.Model): + """Documentos Informados.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d410" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d410" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal , conforme a ta... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC_INI": 0, # Número do documento fiscal inicial (mesmo modelo... + # "NUM_DOC_FIN": 0, # Número do documento fiscal final(mesmo modelo, s... + # "DT_DOC": 0, # Data da emissão dos documentos fiscais + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor total acumulado das operações correspondentes à... + # "VL_DESC": 0, # Valor acumulado dos descontos + # "VL_SERV": 0, # Valor acumulado da prestação de serviço + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor acumulado do ICMS + # } + + +class RegistroD411(models.Model): + """Documentos Cancelados dos Documentos Informados.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d411" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d411" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_DOC_CANC": 0, # Número do documento fiscal cancelado + # } + + +class RegistroD420(models.Model): + """Complemento dos Documentos Informados.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d420" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d420" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MUN_ORIG": 0, # Código do município de origem do serviço, confo... + # "VL_SERV": 0, # Valor total da prestação de serviço + # "VL_BC_ICMS": 0, # Valor total da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor total do ICMS + # } + + +class RegistroD500(models.Model): + """Nota Fiscal de Serviço de Comunicação.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d500" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d500" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_OPER": 0, # Indicador do tipo de operação: 0 - Aquisição 1 – Pr... + # "IND_EMIT": 0, # Indicador do emitente do documento fiscal: 0 - Emis... + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "COD_SIT": 0, # Código da situação do documento fiscal, conforme a t... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "DT_A_P": 0, # Data da entrada (aquisição) ou da saída (prestação do... + # "VL_DOC": 0, # Valor total do documento fiscal + # "VL_DESC": 0, # Valor total do desconto + # "VL_SERV": 0, # Valor da prestação de serviços + # "VL_SERV_NT": 0, # Valor total dos serviços não-tributados pelo ICMS + # "VL_TERC": 0, # Valores cobrados em nome de terceiros + # "VL_DA": 0, # Valor de outras despesas indicadas no documento fiscal + # "VL_BC_ICMS": 0, # Valor da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor do ICMS + # "COD_INF": 0, # Código da informação complementar (campo 02 do Regis... + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # "TP_ASSINANTE": 0, # Código do Tipo de Assinante: 1 - Comercial/Indu... + # } + + +class RegistroD510(models.Model): + """Itens do Documento – Nota Fiscal de Serviço de Comunicação.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d510" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d510" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_ITEM": 0, # Número sequencial do item no documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "COD_CLASS": 0, # Código de classificação do item do serviço de comu... + # "QTD": 0, # Quantidade do item + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor do item + # "VL_DESC": 0, # Valor total do desconto + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "VL_BC_ICMS": 0, # Valor da base de cálculo do ICMS + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_ICMS": 0, # Valor do ICMS creditado/debitado + # "VL_BC_ICMS_UF": 0, # Valor da base de cálculo do ICMS a outras UFs + # "VL_ICMS_UF": 0, # Valor do ICMS a outras UFs + # "IND_REC": 0, # Indicador do tipo de receita: 0 - Receita própria - ... + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150) ... + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # } + + +class RegistroD530(models.Model): + """Terminal Faturado.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d530" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d530" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_SERV": 0, # Indicador do tipo de serviço prestado: 0- Telefonia... + # "DT_INI_SERV": 0, # Data em que se iniciou a prestação do serviço + # "DT_FIN_SERV": 0, # Data em que se encerrou a prestação do serviço + # "PER_FISCAL": 0, # Período fiscal da prestação do serviço (MMAAAA) + # "COD_AREA": 0, # Código de área do terminal faturado, próprio da pre... + # "TERMINAL": 0, # Identificação do terminal faturado + # } + + +class RegistroD590(models.Model): + """Registro Analítico do Documento.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d590" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d590" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação, conforme a tabel... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da operação correspondente à combinação de CST_... + # "VL_BC_ICMS": 0, # Parcela correspondente ao "Valor da base de cálcu... + # "VL_ICMS": 0, # Parcela correspondente ao "Valor do ICMS" referente ... + # "VL_BC_ICMS_UF": 0, # Parcela correspondente ao valor da base de cál... + # "VL_ICMS_UF": 0, # Parcela correspondente ao valor do ICMS de outras... + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "COD_OBS": 0, # Código da observação (campo 02 do Registro 0460) + # } + + +class RegistroD600(models.Model): + """Consolidação da Prestação de Serviços.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d600" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d600" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "COD_MUN": 0, # Código do município dos terminais faturados, conform... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "COD_CONS": 0, # Código de classe de consumo dos serviços de comunic... + # "QTD_CONS": 0, # Quantidade de documentos consolidados neste registr... + # "DT_DOC": 0, # Data dos documentos consolidados + # "VL_DOC": 0, # Valor total acumulado dos documentos fiscais + # "VL_DESC": 0, # Valor acumulado dos descontos + # "VL_SERV": 0, # Valor acumulado das prestações de serviços tributado... + # "VL_SERV_NT": 0, # Valor acumulado dos serviços não-tributados pelo ... + # "VL_TERC": 0, # Valores cobrados em nome de terceiros + # "VL_DA": 0, # Valor acumulado das despesas acessórias + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor acumulado do ICMS + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # } + + +class RegistroD610(models.Model): + """Itens do Documento Consolidado.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d610" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d610" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_CLASS": 0, # Código de classificação do item do serviço de comu... + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "QTD": 0, # Quantidade acumulada do item + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor acumulado do item + # "VL_DESC": 0, # Valor acumulado dos descontos + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação conforme tabela i... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor acumulado do ICMS debitado + # "VL_BC_ICMS_UF": 0, # Valor da base de cálculo do ICMS a outras UFs + # "VL_ICMS_UF": 0, # Valor do ICMS a outras UFs + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "VL_PIS": 0, # Valor acumulado do PIS + # "VL_COFINS": 0, # Valor acumulado da COFINS + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # } + + +class RegistroD690(models.Model): + """Registro Analítico dos Documentos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d690" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d690" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação, conforme a tabel... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da operação correspondente à combinação de CST_... + # "VL_BC_ICMS": 0, # Parcela correspondente ao "Valor da base de cálcu... + # "VL_ICMS": 0, # Parcela correspondente ao "Valor do ICMS" referente ... + # "VL_BC_ICMS_UF": 0, # Parcela correspondente ao valor da base de cál... + # "VL_ICMS_UF": 0, # Parcela correspondente ao valor do ICMS de outras... + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroD695(models.Model): + """Consolidação da Prestação de Serviços.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d695" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d695" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "NRO_ORD_INI": 0, # Número de ordem inicial + # "NRO_ORD_FIN": 0, # Número de ordem final + # "DT_DOC_INI": 0, # Data de emissão inicial dos documentos / Data ini... + # "DT_DOC_FIN": 0, # Data de emissão final dos documentos / Data final... + # "NOM_MEST": 0, # Nome do arquivo Mestre de Documento Fiscal + # "CHV_COD_DIG": 0, # Chave de codificação digital do arquivo Mestre d... + # } + + +class RegistroD696(models.Model): + """Registro Analítico dos Documentos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d696" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d696" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação, conforme a tabel... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da operação correspondente à combinação de CST_... + # "VL_BC_ICMS": 0, # Parcela correspondente ao "Valor da base de cálcu... + # "VL_ICMS": 0, # Parcela correspondente ao "Valor do ICMS" referente ... + # "VL_BC_ICMS_UF": 0, # Parcela correspondente ao valor da base de cál... + # "VL_ICMS_UF": 0, # Parcela correspondente ao valor do ICMS de outras... + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # } + + +class RegistroD697(models.Model): + """Registro de informações de outras UFs.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d697" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d697" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "UF": 0, # Sigla da unidade da federação + # "VL_BC_ICMS": 0, # Valor da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor do ICMS + # } + + +class RegistroD700(models.Model): + """Nota Fiscal Fatura Eletrônica de Serviços de Comunicação – NFCom.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d700" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d700" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_OPER": 0, # Indicador do tipo de prestação: 0: Entrada 1: Saída + # "IND_EMIT": 0, # Indicador do emitente do documento fiscal: 0: Emiss... + # "COD_PART": 0, # Código do participante (Campo 02 do Registro 0150) ... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a Tab... + # "COD_SIT": 0, # Código da situação do documento fiscal, conforme a T... + # "SER": 0, # Série do documento fiscal. + # "NUM_DOC": 0, # Número do documento fiscal. + # "DT_DOC": 0, # Data da emissão do documento fiscal. + # "DT_E_S": 0, # Data da entrada ou da saída + # "VL_DOC": 0, # Valor do documento fiscal. + # "VL_DESC": 0, # Valor do desconto. + # "VL_SERV": 0, # Valor dos serviços tributados pelo ICMS. + # "VL_SERV_NT": 0, # Valores cobrados em nome do prestador sem destaqu... + # "VL_TERC": 0, # Valores cobrados em nome de terceiros. + # "VL_DA": 0, # Valor de despesas acessórias indicadas no documento fi... + # "VL_BC_ICMS": 0, # Valor da Base de Cálculo (BC) do ICMS. + # "VL_ICMS": 0, # Valor do ICMS + # "COD_INF": 0, # Código da informação complementar do documento fisca... + # "VL_PIS": 0, # Valor do PIS/Pasep. + # "VL_COFINS": 0, # Valor do Cofins. + # "CHV_DOCE": 0, # Chave da Nota Fiscal Fatura de Serviço de Comunicaç... + # "FIN_DOCE": 0, # Finalidade da emissão do documento eletrônico: 0 - ... + # "TIP_FAT": 0, # Tipo de faturamento do documento eletrônico: 0 - Fat... + # "COD_MOD_DOC_REF": 0, # Código do modelo do documento fiscal referen... + # "CHV_DOCE_REF": 0, # Chave da nota referenciada. + # "HASH_DOC_REF": 0, # Código de autenticação digital do registro, cam... + # "SER_DOC_REF": 0, # Série do documento fiscal referenciado. + # "NUM_DOC_REF": 0, # Número do documento fiscal referenciado. + # "MES_DOC_REF": 0, # Mês e ano da emissão do documento fiscal referen... + # "COD_MUN_DEST": 0, # Código do município do destinatário conforme a ... + # "DED": 0, # Deduções + # } + + +class RegistroD730(models.Model): + """Registro Analítico Nota Fiscal Fatura Eletrônica de Serviços de Comunicação – + NFCom.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d730" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d730" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação, conforme a tabel... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da prestação correspondente à combinação de CST... + # "VL_BC_ICMS": 0, # Parcela correspondente ao "Valor da base de cálcu... + # "VL_ICMS": 0, # Parcela correspondente ao "Valor do ICMS" referente ... + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "COD_OBS": 0, # Código da observação (campo 02 do Registro 0460) + # } + + +class RegistroD731(models.Model): + """Informação de Fundo de combate à pobreza – FCP.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d731" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d731" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_FCP_OP": 0, # Valor do Fundo de Combate à Pobreza (FCP) vinculad... + # } + + +class RegistroD735(models.Model): + """Observações do lançamento fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d735" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d735" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OBS": 0, # Código da observação do lançamento fiscal (campo 02 ... + # "TXT_COMPL": 0, # Descrição complementar do código de observação. + # } + + +class RegistroD737(models.Model): + """Outras obrigações tributárias.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d737" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d737" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_AJ": 0, # Código do ajustes/benefício/incentivo, conforme tabel... + # "DESCR_COMPL_AJ": 0, # Descrição complementar do ajuste do documento... + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_BC_ICMS": 0, # Base de cálculo do ICMS + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_ICMS": 0, # Valor do ICMS + # "VL_OUTROS": 0, # Outros valores + # } + + +class RegistroD750(models.Model): + """Escrituração consolidada da nota fiscal fatura eletrônica de serviços de + comunicação.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d750" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d750" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a Tab... + # "SER": 0, # Série do documento fiscal + # "DT_DOC": 0, # Data da emissão dos documentos + # "QTD_CONS": 0, # Quantidade de documentos consolidados neste registr... + # "IND_PREPAGO": 0, # Forma de pagamento: 0 – pré pago 1 – pós pago + # "VL_DOC": 0, # Valor total dos documentos + # "VL_SERV": 0, # Valor dos serviços tributados pelo ICMS. + # "VL_SERV_NT": 0, # Valores cobrados em nome do prestador sem destaqu... + # "VL_TERC": 0, # Valor total cobrado em nome de terceiros + # "VL_DESC": 0, # Valor total dos descontos + # "VL_DA": 0, # Valor total das despesas acessórias + # "VL_BC_ICMS": 0, # Valor total da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor total do ICMS + # "VL_PIS": 0, # Valor total do PIS + # "VL_COFINS": 0, # Valor total da COFINS + # "DED": 0, # Deduções + # } + + +class RegistroD760(models.Model): + """Registro Analítico da escrituração consolidada da nota fiscal fatura eletrônica + de serviços.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d760" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d760" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação, conforme a tabel... + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_OPR": 0, # Valor da operação correspondente à combinação de CST_... + # "VL_BC_ICMS": 0, # Parcela correspondente ao "Valor da base de cálcu... + # "VL_ICMS": 0, # Parcela correspondente ao "Valor do ICMS" referente ... + # "VL_RED_BC": 0, # Valor não tributado em função da redução da base d... + # "COD_OBS": 0, # Código da observação (campo 02 do Registro 0460) + # } + + +class RegistroD761(models.Model): + """Informações do fundo de combate à pobreza FCP –.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.d761" + _inherit = "l10n_br_sped.efd_icms_ipi.20.d761" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_FCP_OP": 0, # Valor do Fundo de Combate à Pobreza (FCP) vinculad... + # } + + +class RegistroE100(models.Model): + """Período de Apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e100" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e100" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_INI": 0, # Data inicial a que a apuração se refere + # "DT_FIN": 0, # Data final a que a apuração se refere + # } + + +class RegistroE110(models.Model): + """Apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e110" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e110" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_TOT_DEBITOS": 0, # Valor total dos débitos por "Saídas e prestaç... + # "VL_AJ_DEBITOS": 0, # Valor total dos ajustes a débito decorrentes d... + # "VL_TOT_AJ_DEBITOS": 0, # Valor total de "Ajustes a débito" + # "VL_ESTORNOS_CRED": 0, # Valor total de Ajustes “Estornos de crédito... + # "VL_TOT_CREDITOS": 0, # Valor total dos créditos por "Entradas e aqu... + # "VL_AJ_CREDITOS": 0, # Valor total dos ajustes a crédito decorrentes... + # "VL_TOT_AJ_CREDITOS": 0, # Valor total de "Ajustes a crédito" + # "VL_ESTORNOS_DEB": 0, # Valor total de Ajustes “Estornos de Débitos” + # "VL_SLD_CREDOR_ANT": 0, # Valor total de "Saldo credor do período an... + # "VL_SLD_APURADO": 0, # Valor do saldo devedor apurado + # "VL_TOT_DED": 0, # Valor total de "Deduções" + # "VL_ICMS_RECOLHER": 0, # Valor total de "ICMS a recolher (11-12) + # "VL_SLD_CREDOR_TRANSPORTAR": 0, # Valor total de "Saldo credor a tra... + # "DEB_ESP": 0, # Valores recolhidos ou a recolher, extra-apuração + # } + + +class RegistroE111(models.Model): + """Ajuste/Benefício/Incentivo da Apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e111" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e111" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_AJ_APUR": 0, # Código do ajuste da apuração e dedução, conforme... + # "DESCR_COMPL_AJ": 0, # Descrição complementar do ajuste da apuração + # "VL_AJ_APUR": 0, # Valor do ajuste da apuração + # } + + +class RegistroE112(models.Model): + """Informações Adicionais dos Ajustes da Apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e112" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e112" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_DA": 0, # Número do documento de arrecadação estadual, se houve... + # "NUM_PROC": 0, # Número do processo ao qual o ajuste está vinculado,... + # "IND_PROC": 0, # Indicador da origem do processo: 0- Sefaz 1- Justiç... + # "PROC": 0, # Descrição resumida do processo que embasou o lançamento + # "TXT_COMPL": 0, # Descrição complementar + # } + + +class RegistroE113(models.Model): + """Informações Adicionais dos Ajustes da Apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e113" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e113" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_AJ_ITEM": 0, # Valor do ajuste para a operação/item + # "CHV_DOCE": 0, # Chave do Documento Eletrônico + # } + + +class RegistroE115(models.Model): + """Informações Adicionais da Apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e115" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e115" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_INF_ADIC": 0, # Código da informação adicional conforme tabela ... + # "VL_INF_ADIC": 0, # Valor referente à informação adicional + # "DESCR_COMPL_AJ": 0, # Descrição complementar do ajuste + # } + + +class RegistroE116(models.Model): + """Obrigações do ICMS a Recolher.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e116" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e116" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OR": 0, # Código da obrigação a recolher, conforme a tabela 5.4 + # "VL_OR": 0, # Valor da obrigação a recolher + # "DT_VCTO": 0, # Data de vencimento da obrigação + # "COD_REC": 0, # Código de receita referente à obrigação, próprio da ... + # "NUM_PROC": 0, # Número do processo ou auto de infração ao qual a ob... + # "IND_PROC": 0, # Indicador da origem do processo: 0- Sefaz; 1- Justi... + # "PROC": 0, # Descrição resumida do processo que embasou o lançamento + # "TXT_COMPL": 0, # Descrição complementar das obrigações a recolher + # "MES_REF": 0, # Informe o mês de referência no formato “mmaaaa” + # } + + +class RegistroE200(models.Model): + """Período de Apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e200" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e200" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "UF": 0, # Sigla da unidade da federação a que se refere a apuração ... + # "DT_INI": 0, # Data inicial a que a apuração se refere + # "DT_FIN": 0, # Data final a que a apuração se refere + # } + + +class RegistroE210(models.Model): + """Apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e210" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e210" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_MOV_ST": 0, # Indicador de movimento: 0 - Sem operações com ST ... + # "VL_SLD_CRED_ANT_ST": 0, # Valor do "Saldo credor de período anterio... + # "VL_DEVOL_ST": 0, # Valor total do ICMS ST de devolução de mercadori... + # "VL_RESSARC_ST": 0, # Valor total do ICMS ST de ressarcimentos + # "VL_OUT_CRED_ST": 0, # Valor total de Ajustes "Outros créditos ST" e... + # "VL_AJ_CREDITOS_ST": 0, # Valor total dos ajustes a crédito de ICMS ... + # "VL_RETENCAO_ST": 0, # Valor Total do ICMS retido por Substituição T... + # "VL_OUT_DEB_ST": 0, # Valor Total dos ajustes "Outros débitos ST" " ... + # "VL_AJ_DEBITOS_ST": 0, # Valor total dos ajustes a débito de ICMS ST... + # "VL_SLD_DEV_ANT_ST": 0, # Valor total de Saldo devedor antes das ded... + # "VL_DEDUCOES_ST": 0, # Valor total dos ajustes "Deduções ST" + # "VL_ICMS_RECOL_ST": 0, # Imposto a recolher ST (11-12) + # "VL_SLD_CRED_ST_TRANSPORTAR": 0, # Saldo credor de ST a transportar ... + # "DEB_ESP_ST": 0, # Valores recolhidos ou a recolher, extra-apuração + # } + + +class RegistroE230(models.Model): + """Informações Adicionais dos Ajustes da Apuração do ICMS Substituição Tributária.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e230" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e230" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_DA": 0, # Número do documento de arrecadação estadual, se houve... + # "NUM_PROC": 0, # Número do processo ao qual o ajuste está vinculado,... + # "IND_PROC": 0, # Indicador da origem do processo: 0- Sefaz 1- Justiç... + # "PROC": 0, # Descrição resumida do processo que embasou o lançamento + # "TXT_COMPL": 0, # Descrição complementar + # } + + +class RegistroE240(models.Model): + """Informações Adicionais dos Ajustes da Apuração do ICMS Substituição Tributária.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e240" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e240" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_AJ_ITEM": 0, # Valor do ajuste para a operação/item + # "CHV_DOCE": 0, # Chave do Documento Eletrônico + # } + + +class RegistroE250(models.Model): + """Obrigações do ICMS a Recolher.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e250" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e250" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OR": 0, # Código da obrigação a recolher, conforme a tabela 5.4 + # "VL_OR": 0, # Valor da obrigação ICMS ST a recolher + # "DT_VCTO": 0, # Data de vencimento da obrigação + # "COD_REC": 0, # Código de receita referente à obrigação, próprio da ... + # "NUM_PROC": 0, # Número do processo ou auto de infração ao qual a ob... + # "IND_PROC": 0, # Indicador da origem do processo: 0- Sefaz 1- Justiç... + # "PROC": 0, # Descrição resumida do processo que embasou o lançamento + # "TXT_COMPL": 0, # Descrição complementar das obrigações a recolher + # "MES_REF": 0, # Informe o mês de referência no formato “mmaaaa” + # } + + +class RegistroE300(models.Model): + """Período de Apuração do ICMS Diferencial de Alíquota – UF Origem/Destino EC + 87/15.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e300" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e300" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "UF": 0, # Sigla da unidade da Federação a que se refere à apuração ... + # "DT_INI": 0, # Data Inicial a que a apuração se refere + # "DT_FIN": 0, # Data Final a que a apuração se refere + # } + + +class RegistroE310(models.Model): + """Apuração do ICMS Diferencial de Alíquota – UF Origem/Destino EC 87/15.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e310" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e310" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_MOV_FCP_DIFAL": 0, # Indicador de movimento: 0 - Sem operações ... + # "VL_SLD_CRED_ANT_DIFAL": 0, # Valor do "Saldo credor de período ante... + # "VL_TOT_DEBITOS_DIFAL": 0, # Valor total dos débitos por "Saídas e p... + # "VL_OUT_DEB_DIFAL": 0, # Valor total dos ajustes "Outros débitos ICM... + # "VL_TOT_CREDITOS_DIFAL": 0, # Valor total dos créditos do ICMS refer... + # "VL_OUT_CRED_DIFAL": 0, # Valor total de Ajustes "Outros créditos IC... + # "VL_SLD_DEV_ANT_DIFAL": 0, # Valor total de “Saldo devedor ICMS Dife... + # "VL_DEDUCOES_DIFAL": 0, # Valor total dos ajustes "Deduções ICMS Dif... + # "VL_RECOL_DIFAL": 0, # Valor recolhido ou a recolher referente ao IC... + # "VL_SLD_CRED_TRANSPORTAR_DIFAL": 0, # Saldo credor a transportar par... + # "DEB_ESP_DIFAL": 0, # Valores recolhidos ou a recolher, extra-apuraç... + # "VL_SLD_CRED_ANT_FCP": 0, # Valor do "Saldo credor de período anteri... + # "VL_TOT_DEB_FCP": 0, # Valor total dos débitos FCP por "Saídas e pre... + # "VL_OUT_DEB_FCP": 0, # Valor total dos ajustes "Outros débitos FCP" ... + # "VL_TOT_CRED_FCP": 0, # Valor total dos créditos FCP por Entradas + # "VL_OUT_CRED_FCP": 0, # Valor total de Ajustes "Outros créditos FCP"... + # "VL_SLD_DEV_ANT_FCP": 0, # Valor total de Saldo devedor FCP antes da... + # "VL_DEDUCOES_FCP": 0, # Valor total das deduções "FCP" + # "VL_RECOL_FCP": 0, # Valor recolhido ou a recolher referente ao FCP ... + # "VL_SLD_CRED_TRANSPORTAR_FCP": 0, # Saldo credor a transportar para ... + # "DEB_ESP_FCP": 0, # Valores recolhidos ou a recolher, extra-apuração... + # } + + +class RegistroE311(models.Model): + """Ajuste/Benefício/Incentivo da Apuração do ICMS Diferencial de Alíquota – UF + Origem/Destino EC 87/1.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e311" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e311" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_AJ_APUR": 0, # Código do ajuste da apuração e dedução, conforme... + # "DESCR_COMPL_AJ": 0, # Descrição complementar do ajuste da apuração + # "VL_AJ_APUR": 0, # Valor do ajuste da apuração + # } + + +class RegistroE312(models.Model): + """Informações Adicionais dos Ajustes da Apuração do ICMS Diferencial.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e312" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e312" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_DA": 0, # Número do documento de arrecadação estadual, se houve... + # "NUM_PROC": 0, # Número do processo ao qual o ajuste está vinculado,... + # "IND_PROC": 0, # Indicador da origem do processo: 0- Sefaz 1- Justiç... + # "PROC": 0, # Descrição resumida do processo que embasou o lançamento + # "TXT_COMPL": 0, # Descrição complementar + # } + + +class RegistroE313(models.Model): + """Informações Adicionais da Apuração do ICMS Diferencial.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e313" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e313" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150): + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "CHV_DOCE": 0, # Chave do Documento Eletrônico + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_AJ_ITEM": 0, # Valor do ajuste para a operação/item + # } + + +class RegistroE316(models.Model): + """Obrigações do ICMS recolhido ou a recolher – Diferencial de Alíquota – UF + Origem/Destino EC 87/15.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e316" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e316" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OR": 0, # Código da obrigação recolhida ou a recolher, conforme... + # "VL_OR": 0, # Valor da obrigação recolhida ou a recolher + # "DT_VCTO": 0, # Data de vencimento da obrigação + # "COD_REC": 0, # Código de receita referente à obrigação, próprio da ... + # "NUM_PROC": 0, # Número do processo ou auto de infração ao qual a ob... + # "IND_PROC": 0, # Indicador da origem do processo: 0- SEFAZ 1- Justiç... + # "PROC": 0, # Descrição resumida do processo que embasou o lançamento + # "TXT_COMPL": 0, # Descrição complementar das obrigações recolhidas o... + # "MES_REF": 0, # Informe o mês de referência no formato “mmaaaa” + # } + + +class RegistroE500(models.Model): + """Período de Apuração do IPI.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e500" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e500" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_APUR": 0, # Indicador de período de apuração do IPI: 0 - Mensal... + # "DT_INI": 0, # Data inicial a que a apuração se refere + # "DT_FIN": 0, # Data final a que a apuração se refere + # } + + +class RegistroE510(models.Model): + """Consolidação dos Valores de IPI.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e510" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e510" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CFOP": 0, # Código Fiscal de Operação e Prestação do agrupamento de... + # "CST_IPI": 0, # Código da Situação Tributária referente ao IPI, conf... + # "VL_CONT_IPI": 0, # Parcela correspondente ao "Valor Contábil" refer... + # "VL_BC_IPI": 0, # Parcela correspondente ao "Valor da base de cálcul... + # "VL_IPI": 0, # Parcela correspondente ao "Valor do IPI" referente ao... + # } + + +class RegistroE520(models.Model): + """Apuração do IPI.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e520" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e520" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_SD_ANT_IPI": 0, # Saldo credor do IPI transferido do período ant... + # "VL_DEB_IPI": 0, # Valor total dos débitos por "Saídas com débito do... + # "VL_CRED_IPI": 0, # Valor total dos créditos por "Entradas e aquisiç... + # "VL_OD_IPI": 0, # Valor de "Outros débitos" do IPI (inclusive estorn... + # "VL_OC_IPI": 0, # Valor de "Outros créditos" do IPI (inclusive estor... + # "VL_SC_IPI": 0, # Valor do saldo credor do IPI a transportar para o ... + # "VL_SD_IPI": 0, # Valor do saldo devedor do IPI a recolher + # } + + +class RegistroE530(models.Model): + """Ajustes da Apuração do IPI.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e530" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e530" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_AJ": 0, # Indicador do tipo de ajuste: 0- Ajuste a débito 1- Aj... + # "VL_AJ": 0, # 9 Indicador da origem do documento vinculado ao ajuste... + # "COD_AJ": 0, # Código do ajuste da apuração, conforme a tabela indic... + # "IND_DOC": 0, # Indicador da origem do documento vinculado ao ajuste... + # "NUM_DOC": 0, # Número do documento / processo / declaração ao qual ... + # "DESCR_AJ": 0, # Descrição resumida do ajuste + # } + + +class RegistroE531(models.Model): + """Informações Adicionais dos Ajustes da Apuração do IPI – Identificação dos + Documentos Fiscais.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.e531" + _inherit = "l10n_br_sped.efd_icms_ipi.20.e531" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_AJ_ITEM": 0, # Valor do ajuste para a operação/item + # "CHV_NFE": 0, # Chave da Nota Fiscal Eletrônica (modelo 55) + # } + + +class RegistroG110(models.Model): + """ICMS - Ativo Permanente - CIAP.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.g110" + _inherit = "l10n_br_sped.efd_icms_ipi.20.g110" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_INI": 0, # Data inicial a que a apuração se refere + # "DT_FIN": 0, # Data final a que a apuração se refere + # "SALDO_IN_ICMS": 0, # Saldo inicial de ICMS do CIAP, composto por IC... + # "SOM_PARC": 0, # Somatório das parcelas de ICMS passível de apropria... + # "VL_TRIB_EXP": 0, # Valor do somatório das saídas tributadas e saída... + # "VL_TOTAL": 0, # Valor total de saídas + # "IND_PER_SAI": 0, # Índice de participação do valor do somatório das... + # "ICMS_APROP": 0, # Valor de ICMS a ser apropriado na apuração do ICM... + # "SOM_ICMS_OC": 0, # Valor de outros créditos a ser apropriado na apu... + # } + + +class RegistroG126(models.Model): + """Outros créditos CIAP.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.g126" + _inherit = "l10n_br_sped.efd_icms_ipi.20.g126" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_INI": 0, # Data inicial do período de apuração + # "DT_FIM": 0, # Data final do período de apuração + # "NUM_PARC": 0, # Número da parcela do ICMS + # "VL_PARC_PASS": 0, # Valor da parcela de ICMS passível de apropriaçã... + # "VL_TRIB_OC": 0, # Valor do somatório das saídas tributadas e saídas... + # "VL_TOTAL": 0, # Valor total de saídas no período indicado neste reg... + # "IND_PER_SAI": 0, # Índice de participação do valor do somatório das... + # "VL_PARC_APROP": 0, # Valor de outros créditos de ICMS a ser apropri... + # } + + +class RegistroG130(models.Model): + """Identificação do documento fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.g130" + _inherit = "l10n_br_sped.efd_icms_ipi.20.g130" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_EMIT": 0, # Indicador do emitente do documento fiscal: 0 - Emis... + # "COD_PART": 0, # Código do participante : - do emitente do documento... + # "COD_MOD": 0, # Código do modelo de documento fiscal, conforme tabel... + # "SERIE": 0, # Série do documento fiscal + # "NUM_DOC": 0, # Número de documento fiscal + # "CHV_NFE_CTE": 0, # Chave do documento fiscal eletrônico + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "NUM_DA": 0, # Número do documento de arrecadação estadual, se houve... + # } + + +class RegistroG140(models.Model): + """Identificação do item do documento fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.g140" + _inherit = "l10n_br_sped.efd_icms_ipi.20.g140" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_ITEM": 0, # Número sequencial do item no documento fiscal + # "COD_ITEM": 0, # Código correspondente do bem no documento fiscal + # "QTDE": 0, # Quantidade, deste item da nota fiscal, que foi aplicada... + # "UNID": 0, # Unidade do item constante no documento fiscal de entrad... + # "VL_ICMS_OP_APLICADO": 0, # Valor do ICMS da Operação Própria na ent... + # "VL_ICMS_ST_APLICADO": 0, # Valor do ICMS ST na entrada do item, pro... + # "VL_ICMS_FRT_APLICADO": 0, # Valor do ICMS sobre Frete do Conhecimen... + # "VL_ICMS_DIF_APLICADO": 0, # Valor do ICMS Diferencial de Alíquota, ... + # } + + +class RegistroH005(models.Model): + """Totais do Inventário.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.h005" + _inherit = "l10n_br_sped.efd_icms_ipi.20.h005" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_INV": 0, # Data do inventário + # "VL_INV": 0, # Valor total do estoque + # "MOT_INV": 0, # Informe o motivo do Inventário: 01 - No final no per... + # } + + +class RegistroH010(models.Model): + """Inventário.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.h010" + _inherit = "l10n_br_sped.efd_icms_ipi.20.h010" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "UNID": 0, # Unidade do item + # "QTD": 0, # Quantidade do item + # "VL_UNIT": 0, # Valor unitário do item + # "VL_ITEM": 0, # Valor do item + # "IND_PROP": 0, # Indicador de propriedade/posse do item: 0- Item de ... + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "TXT_COMPL": 0, # Descrição complementar + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # "VL_ITEM_IR": 0, # Valor do item pare efeitos do Imposto de Renda + # } + + +class RegistroH020(models.Model): + """Informação complementar do Inventário.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.h020" + _inherit = "l10n_br_sped.efd_icms_ipi.20.h020" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "CST_ICMS": 0, # Código da Situação Tributária referente ao ICMS, co... + # "BC_ICMS": 0, # Informe a base de cálculo do ICMS + # "VL_ICMS": 0, # Informe o valor do ICMS a ser debitado ou creditado + # } + + +class RegistroH030(models.Model): + """Informações complementares do inventário das mercadorias sujeitas ao regime.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.h030" + _inherit = "l10n_br_sped.efd_icms_ipi.20.h030" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_ICMS_OP": 0, # Valor médio unitário do ICMS OP + # "VL_BC_ICMS_ST": 0, # Valor médio unitário da base de cálculo do ICM... + # "VL_ICMS_ST": 0, # Valor médio unitário do ICMS ST + # "VL_FCP": 0, # Valor médio unitário do FCP + # } + + +class RegistroK010(models.Model): + """Informação sobre o tipo de leiaute.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k010" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k010" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_TP_LEIAUTE": 0, # Indicador de tipo de leiaute adotado: 0- Leia... + # } + + +class RegistroK100(models.Model): + """Período de Apuração do ICMS/IPI.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k100" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k100" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_INI": 0, # Data inicial a que a apuração se refere + # "DT_FIN": 0, # Data final a que a apuração se refere + # } + + +class RegistroK200(models.Model): + """Estoque Escriturado.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k200" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k200" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_EST": 0, # Data do estoque final + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "QTD": 0, # Quantidade em estoque + # "IND_EST": 0, # Indicador do tipo de estoque: 0 = Estoque de proprie... + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150): + # } + + +class RegistroK210(models.Model): + """Desmontagem de mercadorias – Item de Origem.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k210" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k210" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_INI_OS": 0, # Data de início da ordem de serviço + # "DT_FIN_OS": 0, # Data de conclusão da ordem de serviço + # "COD_DOC_OS": 0, # Código de identificação da ordem de serviço + # "COD_ITEM_ORI": 0, # Código do item de origem (campo 02 do Registro ... + # "QTD_ORI": 0, # Quantidade de origem – saída do estoque + # } + + +class RegistroK215(models.Model): + """Desmontagem de mercadorias – Item de Destino.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k215" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k215" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM_DES": 0, # Código do item de destino (campo 02 do Registro... + # "QTD_DES": 0, # Quantidade de destino – entrada em estoque + # } + + +class RegistroK220(models.Model): + """Outras Movimentações Internas entre Mercadorias.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k220" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k220" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_MOV": 0, # Data da movimentação interna + # "COD_ITEM_ORI": 0, # Código do item de origem (campo 02 do Registro ... + # "COD_ITEM_DEST": 0, # Código do item de destino (campo 02 do Registr... + # "QTD_ORI": 0, # Quantidade movimentada do item de origem + # "QTD_DEST": 0, # Quantidade movimentada do item de destino + # } + + +class RegistroK230(models.Model): + """Itens Produzidos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k230" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k230" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_INI_OP": 0, # Data de início da ordem de produção + # "DT_FIN_OP": 0, # Data de conclusão da ordem de produção + # "COD_DOC_OP": 0, # Código de identificação da ordem de produção + # "COD_ITEM": 0, # Código do item produzido (campo 02 do Registro 0200... + # "QTD_ENC": 0, # Quantidade de produção acabada + # } + + +class RegistroK235(models.Model): + """Insumos Consumidos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k235" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k235" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_SAIDA": 0, # Data de saída do estoque para alocação ao produto + # "COD_ITEM": 0, # Código do item componente/insumo (campo 02 do Regis... + # "QTD": 0, # Quantidade consumida do item + # "COD_INS_SUBST": 0, # Código do insumo que foi substituído, caso oco... + # } + + +class RegistroK250(models.Model): + """Industrialização Efetuada por Terceiros – Itens Produzidos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k250" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k250" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_PROD": 0, # Data do reconhecimento da produção ocorrida no terce... + # "COD_ITEM": 0, # Código do item produzido (campo 02 do Registro 0200... + # "QTD": 0, # Quantidade produzida + # } + + +class RegistroK255(models.Model): + """Industrialização em Terceiros – Insumos Consumidos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k255" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k255" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_CONS": 0, # Data do reconhecimento do consumo do insumo referent... + # "COD_ITEM": 0, # Código do insumo (campo 02 do Registro 0200) + # "QTD": 0, # Quantidade de consumo do insumo. + # "COD_INS_SUBST": 0, # Código do insumo que foi substituído, caso oco... + # } + + +class RegistroK260(models.Model): + """Reprocessamento/Reparo de Produto/Insumo.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k260" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k260" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OP_OS": 0, # Código de identificação da ordem de produção, no r... + # "COD_ITEM": 0, # Código do produto/insumo a ser reprocessado/reparad... + # "DT_SAIDA": 0, # Data de saída do estoque + # "QTD_SAIDA": 0, # Quantidade de saída do estoque + # "DT_RET": 0, # Data de retorno ao estoque (entrada) + # "QTD_RET": 0, # Quantidade de retorno ao estoque (entrada) + # } + + +class RegistroK265(models.Model): + """Reprocessamento/Reparo – Mercadorias Consumidas e/ou Retornadas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k265" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k265" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código da mercadoria (campo 02 do Registro 0200) + # "QTD_CONS": 0, # Quantidade consumida – saída do estoque + # "QTD_RET": 0, # Quantidade retornada – entrada em estoque + # } + + +class RegistroK270(models.Model): + """Correção de Apontamento dos Registros K210.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k270" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k270" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_INI_AP": 0, # Data inicial do período de apuração em que ocorreu... + # "DT_FIN_AP": 0, # Data final do período de apuração em que ocorreu o... + # "COD_OP_OS": 0, # Código de identificação da ordem de produção ou da... + # "COD_ITEM": 0, # Código da mercadoria que está sendo corrigido (camp... + # "QTD_COR_POS": 0, # Quantidade de correção positiva de apontamento o... + # "QTD_COR_NEG": 0, # Quantidade de correção negativa de apontamento o... + # "ORIGEM": 0, # 1 - correção de apontamento de produção e/ou consumo ... + # } + + +class RegistroK275(models.Model): + """Correção de Apontamento e Retorno de Insumos dos Registros K215.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k275" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k275" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código da mercadoria (campo 02 do Registro 0200) + # "QTD_COR_POS": 0, # Quantidade de correção positiva de apontamento o... + # "QTD_COR_NEG": 0, # Quantidade de correção negativa de apontamento o... + # "COD_INS_SUBST": 0, # Código do insumo que foi substituído, caso oco... + # } + + +class RegistroK280(models.Model): + """Correção de Apontamento – Estoque Escriturado.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k280" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k280" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_EST": 0, # Data do estoque final escriturado que está sendo corr... + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "QTD_COR_POS": 0, # Quantidade de correção positiva de apontamento o... + # "QTD_COR_NEG": 0, # Quantidade de correção negativa de apontamento o... + # "IND_EST": 0, # Indicador do tipo de estoque: 0 = Estoque de proprie... + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # } + + +class RegistroK290(models.Model): + """Produção Conjunta – Ordem de Produção.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k290" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k290" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_INI_OP": 0, # Data de início da ordem de produção + # "DT_FIN_OP": 0, # Data de conclusão da ordem de produção + # "COD_DOC_OP": 0, # Código de identificação da ordem de produção + # } + + +class RegistroK291(models.Model): + """Produção Conjunta – Itens Produzidos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k291" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k291" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código do item produzido (campo 02 do Registro 0200... + # "QTD": 0, # Quantidade de produção acabada + # } + + +class RegistroK292(models.Model): + """Produção Conjunta – Insumos Consumidos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k292" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k292" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código do insumo/componente consumido (campo 02 do ... + # "QTD": 0, # Quantidade consumida + # } + + +class RegistroK301(models.Model): + """Produção Conjunta – Industrialização Efetuada por Terceiros – Itens Produzidos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k301" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k301" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código do item produzido (campo 02 do Registro 0200... + # "QTD": 0, # Quantidade produzida + # } + + +class RegistroK302(models.Model): + """Produção Conjunta – Industrialização Efetuada por Terceiros – Insumos + Consumidos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.k302" + _inherit = "l10n_br_sped.efd_icms_ipi.20.k302" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código do insumo (campo 02 do Registro 0200) + # "QTD": 0, # Quantidade consumida + # } + + +class Registro1010(models.Model): + """Obrigatoriedade de registros do Bloco 1.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1010" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1010" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_EXP": 0, # Reg. 1100 - Ocorreu averbação (conclusão) de exporta... + # "IND_CCRF": 0, # Reg 1200 - Existem informações acerca de créditos d... + # "IND_COMB": 0, # Reg. 1300 - É comércio varejista de combustíveis co... + # "IND_USINA": 0, # Reg. 1390 - Usinas de açúcar e/álcool - O estabele... + # "IND_VA": 0, # Reg 1400 - Sendo o registro obrigatório em sua Unidad... + # "IND_EE": 0, # Reg 1500 - A empresa é distribuidora de energia e oco... + # "IND_CART": 0, # Reg 1601 - Realizou vendas com instrumentos eletrôn... + # "IND_FORM": 0, # Reg. 1700 - Foram emitidos documentos fiscais em pa... + # "IND_AER": 0, # Reg 1800 – A empresa prestou serviços de transporte ... + # "IND_GIAF1": 0, # Reg. 1960 - Possui informações GIAF1? S – Sim; N –... + # "IND_GIAF3": 0, # Reg. 1970 - Possui informações GIAF3? S – Sim; N –... + # "IND_GIAF4": 0, # Reg. 1980 - Possui informações GIAF4? S – Sim; N –... + # "IND_REST_RESSARC_COMPL_ICMS": 0, # Reg. 1250 – Possui informações c... + # } + + +class Registro1100(models.Model): + """Registro de Informações sobre Exportação.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1100" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1100" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_DOC": 0, # Informe o tipo de documento: 0 - Declaração de Expor... + # "NRO_DE": 0, # Número da declaração + # "DT_DE": 0, # Data da declaração (DDMMAAAA) + # "NAT_EXP": 0, # Preencher com: + # "NRO_RE": 0, # Nº do registro de Exportação + # "DT_RE": 0, # Data do Registro de Exportação (DDMMAAAA) + # "CHC_EMB": 0, # Nº do conhecimento de embarque + # "DT_CHC": 0, # Data do conhecimento de embarque (DDMMAAAA) + # "DT_AVB": 0, # Data da averbação da Declaração de exportação (ddmmaa... + # "TP_CHC": 0, # Informação do tipo de conhecimento de embarque : 01 -... + # "PAIS": 0, # Código do país de destino da mercadoria (Preencher conf... + # } + + +class Registro1105(models.Model): + """Documentos Fiscais de Exportação.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1105" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1105" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_MOD": 0, # Código do modelo da NF, conforme tabela 4.1.1 + # "SERIE": 0, # Série da Nota Fiscal + # "NUM_DOC": 0, # Número de Nota Fiscal de Exportação emitida pelo Exp... + # "CHV_NFE": 0, # Chave da Nota Fiscal Eletrônica + # "DT_DOC": 0, # Data da emissão da NF de exportação + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # } + + +class Registro1110(models.Model): + """Operações de Exportação Indireta.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1110" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1110" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART": 0, # Código do participante - fornecedor da mercadoria d... + # "COD_MOD": 0, # Código do documento fiscal, conforme a tabela 4.1.1 + # "SER": 0, # Série do documento fiscal recebido com fins específicos ... + # "NUM_DOC": 0, # Número do documento fiscal recebido com fins específ... + # "DT_DOC": 0, # Data da emissão do documento fiscal recebido com fins... + # "CHV_NFE": 0, # Chave da Nota Fiscal Eletrônica + # "NR_MEMO": 0, # Número do Memorando de Exportação + # "QTD": 0, # Quantidade do item efetivamente exportado + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # } + + +class Registro1200(models.Model): + """Controle de Créditos Fiscais - ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1200" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1200" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_AJ_APUR": 0, # Código de ajuste, conforme informado na tabela i... + # "SLD_CRED": 0, # Saldo de créditos fiscais de períodos anteriores + # "CRED_APR": 0, # Total de crédito apropriado no mês + # "CRED_RECEB": 0, # Total de créditos recebidos por transferência + # "CRED_UTIL": 0, # Total de créditos utilizados no período + # "SLD_CRED_FIM": 0, # Saldo de crédito fiscal acumulado a transportar... + # } + + +class Registro1210(models.Model): + """Utilização de Créditos Fiscais.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1210" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1210" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "TIPO_UTIL": 0, # Tipo de utilização do crédito, conforme tabela ind... + # "NR_DOC": 0, # Número do documento utilizado na baixa de créditos + # "VL_CRED_UTIL": 0, # Total de crédito utilizado + # "CHV_DOCE": 0, # Chave do Documento Eletrônico + # } + + +class Registro1250(models.Model): + """Informações consolidadas de saldos de restituição.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1250" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1250" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # } + + +class Registro1255(models.Model): + """Informações consolidadas de saldos de restituição.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1255" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1255" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # } + + +class Registro1300(models.Model): + """Movimentação diária de combustíveis.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1300" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1300" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # Código do produto, constante do registro 0200 + # "DT_FECH": 0, # Data do fechamento da movimentação + # "ESTQ_ABERT": 0, # Estoque no inicio do dia, em litros + # "VOL_ENTR": 0, # Volume recebido no dia (em litros) + # "VOL_DISP": 0, # Volume disponível (04 + 05), em litros + # "VOL_SAIDAS": 0, # Volume total das saídas, em litros + # "ESTQ_ESCR": 0, # Estoque escritural (06 - 07), litros + # "VAL_AJ_PERDA": 0, # Valor da perda, em litros + # "VAL_AJ_GANHO": 0, # Valor do ganho, em litros + # } + + +class Registro1310(models.Model): + """Movimentação diária de combustíveis por tanque.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1310" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1310" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_TANQUE": 0, # Tanque que armazena o combustível + # "ESTQ_ABERT": 0, # Estoque no início do dia, em litros + # "VOL_ENTR": 0, # Volume recebido no dia (em litros) + # "VOL_DISP": 0, # Volume disponível (03 + 04), em litros + # "VOL_SAIDAS": 0, # Volume total das saídas, em litros + # "ESTQ_ESCR": 0, # Estoque escritural(05 - 06), litros + # "VAL_AJ_PERDA": 0, # Valor da perda, em litros + # "VAL_AJ_GANHO": 0, # Valor do ganho, em litros + # "FECH_FISICO": 0, # Volume aferido no tanque, em litros. Estoque de ... + # "CAP_TANQUE": 0, # Capacidade de armazenagem, em litros + # } + + +class Registro1320(models.Model): + """Volume de vendas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1320" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1320" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_BICO": 0, # Bico ligado à bomba + # "NR_INTERV": 0, # Número da intervenção + # "MOT_INTERV": 0, # Motivo da intervenção + # "NOM_INTERV": 0, # Nome do interventor + # "CNPJ_INTERV": 0, # CNPJ da empresa responsável pela intervenção + # "CPF_INTERV": 0, # CPF do técnico responsável pela intervenção + # "VAL_FECHA": 0, # Valor da leitura final do contador, no fechamento ... + # "VAL_ABERT": 0, # Valor da leitura inicial do contador, na abertura ... + # "VOL_AFERI": 0, # Aferições da bomba, em litros + # "VOL_VENDAS": 0, # Vendas (08 - 09 - 10 ) do bico, em litros + # } + + +class Registro1350(models.Model): + """Bombas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1350" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1350" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "SERIE": 0, # Número de série da bomba + # "FABRICANTE": 0, # Nome do fabricante da bomba + # "MODELO": 0, # Modelo da bomba + # "TIPO_MEDICAO": 0, # Identificador de medição: 0 - analógico 1 - dig... + # } + + +class Registro1360(models.Model): + """Lacres das bombas.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1360" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1360" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_LACRE": 0, # Número do lacre associado na bomba + # "DT_APLICACAO": 0, # Data de aplicação do lacre + # } + + +class Registro1370(models.Model): + """Bicos da bomba.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1370" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1370" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_BICO": 0, # Número sequencial do bico ligado à bomba + # "COD_ITEM": 0, # Código do produto, constante do registro 0200 + # "NUM_TANQUE": 0, # Tanque que armazena o combustível + # } + + +class Registro1390(models.Model): + """Controle de produção de Usina.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1390" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1390" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PROD": 0, # Código do produto conforme tabela 5.8 + # } + + +class Registro1391(models.Model): + """Produção diária da usina.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1391" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1391" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_REGISTRO": 0, # Data de produção (DDMMAAAA) + # "QTD_MOID": 0, # Quantidade de insumo esmagado (toneladas) + # "ESTQ_INI": 0, # Estoque inicial (litros / kg) + # "QTD_PRODUZ": 0, # Quantidade produzida (litros / kg) + # "ENT_ANID_HID": 0, # Entrada de álcool anidro decorrente da transfor... + # "OUTR_ENTR": 0, # Outras entradas (litros / kg) + # "PERDA": 0, # Evaporação (litros) ou Quebra de peso (kg) + # "CONS": 0, # Consumo (litros) + # "SAI_ANI_HID": 0, # Saída para transformação (litros). + # "SAIDAS": 0, # Saídas (litros / kg) + # "ESTQ_FIN": 0, # Estoque final (litros / kg) + # "ESTQ_INI_MEL": 0, # Estoque inicial de mel residual (kg) + # "PROD_DIA_MEL": 0, # Produção de mel residual (kg) e entradas de mel... + # "UTIL_MEL": 0, # Mel residual utilizado (kg) e saídas de mel (kg) + # "PROD_ALC_MEL": 0, # Produção de álcool (litros) ou açúcar (kg) prov... + # "OBS": 0, # Observações + # "COD_ITEM": 0, # Informar o insumo conforme código do item (campo 02... + # "TP_RESIDUO": 0, # Tipo de resíduo produzido: 01 – Bagaço de cana 02... + # "QTD_RESIDUO": 0, # Quantidade de resíduo produzido (toneladas) + # "QTD_RESIDUO_DDG": 0, # Quantidade de resíduo produzido de DDG (tone... + # "QTD_RESIDUO_WDG": 0, # Quantidade de resíduo produzido de WDG (tone... + # "QTD_RESIDUO_CANA": 0, # Quantidade de resíduo produzido de bagaço d... + # } + + +class Registro1400(models.Model): + """Informação sobre Valor Agregado.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1400" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1400" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_ITEM": 0, # - IPM Código do item (tabela própria da unidade da ... + # "MUN": 0, # Código do município de origem/destino + # "VALOR": 0, # Valor mensal correspondente ao município + # } + + +class Registro1500(models.Model): + """Nota fiscal/Conta de energia elétrica.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1500" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1500" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_OPER": 0, # Indicador do tipo de operação: 1 - Saída + # "IND_EMIT": 0, # Indicador do emitente do documento fiscal: 0 - Emis... + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "COD_SIT": 0, # Código da situação do documento fiscal, conforme a t... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "COD_CONS": 0, # Código de classe de consumo de energia elétrica ou ... + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "DT_E_S": 0, # Data da entrada ou da saída + # "VL_DOC": 0, # Valor total do documento fiscal + # "VL_DESC": 0, # Valor total do desconto + # "VL_FORN": 0, # Valor total fornecido/consumido + # "VL_SERV_NT": 0, # Valor total dos serviços não-tributados pelo ICMS + # "VL_TERC": 0, # Valor total cobrado em nome de terceiros + # "VL_DA": 0, # Valor total de despesas acessórias indicadas no docume... + # "VL_BC_ICMS": 0, # Valor acumulado da base de cálculo do ICMS + # "VL_ICMS": 0, # Valor acumulado do ICMS + # "VL_BC_ICMS_ST": 0, # Valor acumulado da base de cálculo do ICMS sub... + # "VL_ICMS_ST": 0, # Valor acumulado do ICMS retido por substituição t... + # "COD_INF": 0, # Código da informação complementar do documento fisca... + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # "TP_LIGACAO": 0, # Código de tipo de Ligação 1 - Monofásico 2 - Bifá... + # "COD_GRUPO_TENSAO": 0, # Código de grupo de tensão: 01 - A1 - Alta T... + # } + + +class Registro1510(models.Model): + """Itens do documento Nota fiscal/Conta de energia elétrica.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1510" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1510" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_ITEM": 0, # Número sequencial do item no documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "COD_CLASS": 0, # Código de classificação do item de energia elétric... + # "QTD": 0, # Quantidade do item + # "UNID": 0, # Unidade do item (Campo 02 do registro 0190) + # "VL_ITEM": 0, # Valor do item + # "VL_DESC": 0, # Valor total do desconto + # "CST_ICMS": 0, # Código da Situação Tributária, conforme a tabela in... + # "CFOP": 0, # Código Fiscal de Operação e Prestação + # "VL_BC_ICMS": 0, # Valor da base de cálculo do ICMS + # "ALIQ_ICMS": 0, # Alíquota do ICMS + # "VL_ICMS": 0, # Valor do ICMS creditado/debitado + # "VL_BC_ICMS_ST": 0, # Valor da base de cálculo referente à substitui... + # "ALIQ_ST": 0, # Alíquota do ICMS da substituição tributária na unida... + # "VL_ICMS_ST": 0, # Valor do ICMS referente à substituição tributária + # "IND_REC": 0, # Indicador do tipo de receita: 0- Receita própria; 1-... + # "COD_PART": 0, # Código do participante receptor da receita, terceir... + # "VL_PIS": 0, # Valor do PIS + # "VL_COFINS": 0, # Valor da COFINS + # "COD_CTA": 0, # Código da conta analítica contábil debitada/creditad... + # } + + +class Registro1600(models.Model): + """Total das operações com cartão de crédito e/ou débito.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1600" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1600" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # } + + +class Registro1601(models.Model): + """Operações com instrumentos de pagamentos eletrônicos.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1601" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1601" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART_IP": 0, # Código do participante (campo 02 do Registro 015... + # "COD_PART_IT": 0, # Código do participante (campo 02 do Registro 015... + # "TOT_VS": 0, # Valor total bruto das vendas e/ou prestações de servi... + # "TOT_ISS": 0, # Valor total bruto das prestações de serviços no camp... + # "TOT_OUTROS": 0, # Valor total de operações deduzido dos valores dos... + # } + + +class Registro1700(models.Model): + """Documentos fiscais utilizados.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1700" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1700" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_DISP": 0, # Código dispositivo autorizado: 00 - Formulário de S... + # "COD_MOD": 0, # Código do modelo do dispositivo autorizado, conforme... + # "SER": 0, # Série do dispositivo autorizado + # "SUB": 0, # Subsérie do dispositivo autorizado + # "NUM_DOC_INI": 0, # Número inicial do dispositivo autorizado + # "NUM_DOC_FIN": 0, # Número final do dispositivo autorizado + # "NUM_AUT": 0, # Número da autorização, conforme dispositivo autoriza... + # } + + +class Registro1710(models.Model): + """Documentos fiscais cancelados/inutilizados.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1710" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1710" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_DOC_INI": 0, # Número inicial do dispositivo autorizado + # "NUM_DOC_FIN": 0, # Número final do dispositivo autorizado + # } + + +class Registro1800(models.Model): + """DCTA.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1800" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1800" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_CARGA": 0, # Valor das prestações cargas (Tributado) + # "VL_PASS": 0, # Valor das prestações passageiros/cargas (Não Tributa... + # "VL_FAT": 0, # Valor total do faturamento (2+3) + # "IND_RAT": 0, # Índice para rateio (2/4) + # "VL_ICMS_ANT": 0, # Valor total dos créditos de ICMS + # "VL_BC_ICMS": 0, # Valor da base de cálculo do ICMS + # "VL_ICMS_APUR": 0, # Valor do ICMS apurado (5 X 6) + # "VL_BC_ICMS_APUR": 0, # Valor da base de cálculo do ICMS apurada (5 ... + # "VL_DIF": 0, # Valor da diferença a ser levada a estorno de crédito ... + # } + + +class Registro1900(models.Model): + """Indicador de sub-apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1900" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1900" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_APUR_ICMS": 0, # Indicador de outra apuração do ICMS: 3 - APURA... + # "DESCR_COMPL_OUT_APUR": 0, # Descrição complementar de Outra Apuraçã... + # } + + +class Registro1910(models.Model): + """Período da sub-apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1910" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1910" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "DT_INI": 0, # Data inicial da sub-apuração + # "DT_FIN": 0, # Data final da sub-apuração + # } + + +class Registro1920(models.Model): + """Sub-apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1920" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1920" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "VL_TOT_TRANSF_DEBITOS_OA": 0, # Valor total dos débitos por "Saídas... + # "VL_TOT_AJ_DEBITOS_OA": 0, # Valor total de "Ajustes a débito" + # "VL_ESTORNOS_CRED_OA": 0, # Valor total de Ajustes “Estornos de créd... + # "VL_TOT_TRANSF_CREDITOS_OA": 0, # Valor total dos créditos por "Entr... + # "VL_TOT_AJ_CREDITOS_OA": 0, # Valor total de "Ajustes a crédito" + # "VL_ESTORNOS_DEB_OA": 0, # Valor total de Ajustes “Estornos de Débit... + # "VL_SLD_CREDOR_ANT_OA": 0, # Valor total de "Saldo credor do período... + # "VL_SLD_APURADO_OA": 0, # Valor do saldo devedor apurado + # "VL_TOT_DED": 0, # Valor total de "Deduções" + # "VL_ICMS_RECOLHER_OA": 0, # Valor total de "ICMS a recolher (09-10) + # "VL_SLD_CREDOR_TRANSP_OA": 0, # Valor total de "Saldo credor a trans... + # "DEB_ESP_OA": 0, # Valores recolhidos ou a recolher, extra-apuração + # } + + +class Registro1921(models.Model): + """Ajuste/benefício/incentivo da sub-apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1921" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1921" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_AJ_APUR": 0, # Código do ajuste da SUB-APURAÇÃO e dedução, conf... + # "DESCR_COMPL_AJ": 0, # Descrição complementar do ajuste da apuração + # "VL_AJ_APUR": 0, # Valor do ajuste da apuração + # } + + +class Registro1922(models.Model): + """Informações adicionais dos ajustes da sub-apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1922" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1922" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "NUM_DA": 0, # Número do documento de arrecadação estadual, se houve... + # "NUM_PROC": 0, # Número do processo ao qual o ajuste está vinculado,... + # "IND_PROC": 0, # Indicador da origem do processo: 0- SEFAZ 1- Justiç... + # "PROC": 0, # Descrição resumida do processo que embasou o lançamento + # "TXT_COMPL": 0, # Descrição complementar + # } + + +class Registro1923(models.Model): + """Informações adicionais dos ajustes da sub-apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1923" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1923" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_PART": 0, # Código do participante (campo 02 do Registro 0150):... + # "COD_MOD": 0, # Código do modelo do documento fiscal, conforme a tab... + # "SER": 0, # Série do documento fiscal + # "SUB": 0, # Subsérie do documento fiscal + # "NUM_DOC": 0, # Número do documento fiscal + # "DT_DOC": 0, # Data da emissão do documento fiscal + # "COD_ITEM": 0, # Código do item (campo 02 do Registro 0200) + # "VL_AJ_ITEM": 0, # Valor do ajuste para a operação/item + # "CHV_DOCE": 0, # Chave do Documento Eletrônico + # } + + +class Registro1925(models.Model): + """Informações adicionais da sub-apuração do ICMS.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1925" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1925" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_INF_ADIC": 0, # Código da informação adicional conforme tabela ... + # "VL_INF_ADIC": 0, # Valor referente à informação adicional + # "DESCR_COMPL_AJ": 0, # Descrição complementar do ajuste + # } + + +class Registro1926(models.Model): + """Obrigações do ICMS a recolher.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1926" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1926" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "COD_OR": 0, # Código da obrigação a recolher, conforme a tabela 5.4 + # "VL_OR": 0, # Valor da obrigação a recolher + # "DT_VCTO": 0, # Data de vencimento da obrigação + # "COD_REC": 0, # Código de receita referente à obrigação, próprio da ... + # "NUM_PROC": 0, # Número do processo ou auto de infração ao qual a ob... + # "IND_PROC": 0, # Indicador da origem do processo: 0- SEFAZ 1- Justiç... + # "PROC": 0, # Descrição resumida do processo que embasou o lançamento + # "TXT_COMPL": 0, # Descrição complementar das obrigações a recolher + # "MES_REF": 0, # Informe o mês de referência no formato “mmaaaa” + # } + + +class Registro1960(models.Model): + """GIAF 1.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1960" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1960" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_AP": 0, # Indicador da sub-apuração por tipo de benefício (conf... + # "G1_01": 0, # Percentual de crédito presumido + # "G1_02": 0, # Saídas não incentivadas de PI + # "G1_03": 0, # Saídas incentivadas de PI + # "G1_04": 0, # Saídas incentivadas de PI para fora do Nordeste + # "G1_05": 0, # Saldo devedor do ICMS antes das deduções do incentivo + # "G1_06": 0, # Saldo devedor do ICMS relativo à faixa incentivada de ... + # "G1_07": 0, # Crédito presumido nas saídas incentivadas de PI para f... + # "G1_08": 0, # Saldo devedor relativo à faixa incentivada de PI após ... + # "G1_09": 0, # Crédito presumido + # "G1_10": 0, # Dedução de incentivo da Indústria (crédito presumido) + # "G1_11": 0, # Saldo devedor do ICMS após deduções + # } + + +class Registro1970(models.Model): + """GIAF 3.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1970" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1970" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_AP": 0, # Indicador da sub-apuração por tipo de benefício (conf... + # "G3_01": 0, # Importações com ICMS diferido + # "G3_02": 0, # ICMS diferido nas importações + # "G3_03": 0, # Saídas não incentivadas de PI + # "G3_04": 0, # Percentual de incentivo nas saídas para fora do Estado + # "G3_05": 0, # Saídas incentivadas de PI para fora do Estado + # "G3_06": 0, # ICMS das saídas incentivadas de PI para fora do Estado + # "G3_07": 0, # Crédito presumido nas saídas para fora do Estado. + # "G3_T": 0, # Dedução de incentivo da Importação (crédito presumido) + # "G3_08": 0, # Saldo devedor do ICMS antes das deduções do incentivo + # "G3_09": 0, # Saldo devedor do ICMS após deduções do incentivo + # } + + +class Registro1975(models.Model): + """GIAF 3.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1975" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1975" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "ALIQ_IMP_BASE": 0, # Alíquota incidente sobre as importações-base + # "G3_10": 0, # Saídas incentivadas de PI + # "G3_11": 0, # Importações-base para o crédito presumido + # "G3_12": 0, # Crédito presumido nas saídas internas + # } + + +class Registro1980(models.Model): + """GIAF 4.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.1980" + _inherit = "l10n_br_sped.efd_icms_ipi.20.1980" + + # @api.model + # def _map_from_odoo(self, record, parent_record, declaration, index=0): + # return { + # "IND_AP": 0, # Indicador da sub-apuração por tipo de benefício (conf... + # "G4_01": 0, # Entradas (percentual de incentivo) + # "G4_02": 0, # Entradas não incentivadas de PI + # "G4_03": 0, # Entradas incentivadas de PI + # "G4_04": 0, # Saídas (percentual de incentivo) + # "G4_05": 0, # Saídas não incentivadas de PI + # "G4_06": 0, # Saídas incentivadas de PI + # "G4_07": 0, # Saldo devedor do ICMS antes das deduções do incentivo ... + # "G4_08": 0, # Crédito presumido nas entradas incentivadas de PI + # "G4_09": 0, # Crédito presumido nas saídas incentivadas de PI + # "G4_10": 0, # Dedução de incentivo da Central de Distribuição (entra... + # "G4_11": 0, # Saldo devedor do ICMS após deduções do incentivo + # } diff --git a/spedextractor/specs/efd_icms_ipi/20/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi_spec_20.py b/spedextractor/specs/efd_icms_ipi/20/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi_spec_20.py new file mode 100644 index 0000000..1ae22a9 --- /dev/null +++ b/spedextractor/specs/efd_icms_ipi/20/l10n_br_sped_efd_icms_ipi/models/sped_efd_icms_ipi_spec_20.py @@ -0,0 +1,18825 @@ +# Copyright 2025 - TODAY, Akretion - Raphael Valyi +# License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). +# Generated by https://github.com/akretion/sped-extractor and xsdata-odoo +# ruff: noqa: E501 + +""" +STRUCTURE SPED EFD_ICMS_IPI + + + + - 0002 CLASSIFICAÇÃO DO ESTABELECIMENTO INDUSTRIAL OU EQUIPARADO A INDUSTRIAL + + - 0005 DADOS COMPLEMENTARES DA ENTIDADE + + - 0015 DADOS DO CONTRIBUINTE SUBSTITUTO OU RESPONSÁVEL PELO ICMS DESTINO + + - 0100 DADOS DO CONTABILISTA + + - 0150 TABELA DE CADASTRO DO PARTICIPANTE + ≡ 0175 Alteração da Tabela de Cadastro de Participante + + - 0190 IDENTIFICAÇÃO DAS UNIDADES DE MEDIDA + + - 0200 TABELA DE IDENTIFICAÇÃO DO ITEM + ≡ 0205 Alteração do Item + - 0206 Código de produto conforme Tabela ANP + ≡ 0210 Consumo Específico Padronizado + ≡ 0220 Fatores de Conversão de Unidades + ≡ 0221 Correlação entre códigos de itens comercializados + + - 0300 CADASTRO DE BENS OU COMPONENTES DO ATIVO IMOBILIZADO + - 0305 Informação sobre a Utilização do Bem + + - 0400 TABELA DE NATUREZA DA OPERAÇÃO/ PRESTAÇÃO + + - 0450 TABELA DE INFORMAÇÃO COMPLEMENTAR DO DOCUMENTO FISCAL + + - 0460 TABELA DE OBSERVAÇÕES DO LANÇAMENTO FISCAL + + - 0500 PLANO DE CONTAS CONTÁBEIS + + - 0600 CENTRO DE CUSTOS + + + + - B020 NOTA FISCAL (CÓDIGO 01) + ≡ B025 Detalhamento por combinação de alíquota e item da lista de serviços da Lei Complementar nº 116/2003 + + - B030 NOTA FISCAL DE SERVIÇOS SIMPLIFICADA + ≡ B035 Detalhamento por combinação de alíquota e item da lista de serviços da Lei Complementar nº 116/2003 + + - B350 SERVIÇOS PRESTADOS POR INSTITUIÇÕES FINANCEIRAS + + - B420 TOTALIZAÇÃO DOS VALORES DE SERVIÇOS PRESTADOS POR COMBINAÇÃO DE ALÍQUOTA E ITEM DA LISTA DE SERVIÇOS + + - B440 TOTALIZAÇÃO DOS VALORES RETIDOS + + - B460 DEDUÇÕES DO ISS + + - B470 APURAÇÃO DO ISS + + - B500 APURAÇÃO DO ISS SOCIEDADE UNIPROFISSIONAL + ≡ B510 Uniprofissional – empregados e sócios + + + + - C100 DOCUMENTO - NOTA FISCAL (CÓDIGO 01) + - C101 Informação complementar dos documentos fiscais quando das operações interestaduais destinadas + - C105 Operações com ICMS ST recolhido para UF diversa do destinatário do documento fiscal + ≡ C110 Complemento de Documento + ≡ C111 + ≡ C112 + ≡ C113 + ≡ C114 + ≡ C115 + ≡ C116 + ≡ C120 Complemento de Documento + - C130 Complemento de Documento - ISSQN + - C140 Complemento de Documento - Fatura + ≡ C141 + - C160 Complemento de Documento + ≡ C165 Complemento de Documento + ≡ C170 Complemento de Documento + ≡ C171 + - C172 + ≡ C173 + ≡ C174 + ≡ C175 + ≡ C176 + - C177 + - C178 + - C179 + - C180 + ≡ C181 + ≡ C185 Informações complementares das operações de saída de mercadorias sujeitas à substituição tributária + ≡ C186 Informações complementares das operações de devolução de entradas de mercadorias sujeitas + ≡ C190 Registro Analítico do Documento + - C191 + ≡ C195 Complemento do Registro Analítico + ≡ C197 + + - C300 DOCUMENTO + ≡ C310 Documentos Cancelados de Nota Fiscal de Venda a Consumidor + ≡ C320 Registro Analítico das Notas Fiscais de Venda a Consumidor + ≡ C321 + - C330 + + - C350 NOTA FISCAL DE VENDA A CONSUMIDOR + ≡ C370 Itens do documento (código 02) + - C380 + ≡ C390 Registro Analítico das Notas Fiscais de Venda a Consumidor + + - C400 EQUIPAMENTO ECF (CÓDIGO 02, 2D E 60) + ≡ C405 Redução Z (código 02, 2D e 60) + - C410 + ≡ C420 + ≡ C425 + ≡ C430 + ≡ C460 + - C465 + ≡ C470 + - C480 + ≡ C490 + + - C495 RESUMO MENSAL DE ITENS DO ECF POR ESTABELECIMENTO + + - C500 NOTA FISCAL/CONTA DE ENERGIA ELÉTRICA + ≡ C510 Itens do Documento + ≡ C590 Registro Analítico do Documento + - C591 + ≡ C595 Observações do Lançamento Fiscal + ≡ C597 + + - C600 CONSOLIDAÇÃO DIÁRIA DE NOTAS FISCAIS/CONTAS DE ENERGIA ELÉTRICA + ≡ C601 Documentos cancelados + ≡ C610 Itens do Documento Consolidado + ≡ C690 Registro Analítico dos Documentos + + - C700 CONSOLIDAÇÃO DOS DOCUMENTOS NOTA FISCAL/CONTA ENERGIA ELÉTRICA + ≡ C790 Registro Analítico dos Documentos + ≡ C791 + + - C800 REGISTRO CUPOM FISCAL ELETRÔNICO + ≡ C810 Itens do documento do cupom fiscal eletrônico – SAT + - C815 + ≡ C850 Registro Analítico do CF-e-SAT + ≡ C855 Observações do lançamento fiscal + ≡ C857 + + - C860 IDENTIFICAÇÃO DO EQUIPAMENTO SAT-CF-E + ≡ C870 Itens do documento do cupom fiscal eletrônico – SAT + - C880 + ≡ C890 Resumo diário de CF-e- SAT + ≡ C895 Observações do lançamento fiscal + ≡ C897 + + + + - D100 REGISTRO D100- NOTA FISCAL DE SERVIÇO DE TRANSPORTE + ≡ D110 Itens do documento + ≡ D120 + ≡ D130 Complemento do Conhecimento Rodoviário de Cargas + - D140 Complemento do Conhecimento Aquaviário de Cargas + - D150 Complemento do Conhecimento Aéreo de Cargas + ≡ D160 Carga Transportada + - D161 + ≡ D162 + - D170 Complemento do Conhecimento Multimodal de Cargas + ≡ D180 Modais (código 26) + ≡ D190 Registro Analítico dos Documentos + ≡ D195 Observações do lançamento fiscal + ≡ D197 + + - D300 REGISTRO ANALÍTICO DOS BILHETES CONSOLIDADOS DE PASSAGEM RODOVIÁRIO + ≡ D301 Documentos cancelados dos Bilhetes de Passagem Rodoviário + ≡ D310 Complemento dos Bilhetes + + - D350 EQUIPAMENTO ECF + ≡ D355 Redução Z + - D360 + ≡ D365 + ≡ D370 + ≡ D390 + + - D400 RESUMO DO MOVIMENTO DIÁRIO + ≡ D410 Documentos Informados + ≡ D411 + ≡ D420 Complemento dos Documentos Informados + + - D500 NOTA FISCAL DE SERVIÇO DE COMUNICAÇÃO + ≡ D510 Itens do Documento – Nota Fiscal de Serviço de Comunicação + ≡ D530 Terminal Faturado + ≡ D590 Registro Analítico do Documento + + - D600 CONSOLIDAÇÃO DA PRESTAÇÃO DE SERVIÇOS + ≡ D610 Itens do Documento Consolidado + ≡ D690 Registro Analítico dos Documentos + + - D695 CONSOLIDAÇÃO DA PRESTAÇÃO DE SERVIÇOS + ≡ D696 Registro Analítico dos Documentos + ≡ D697 + + - D700 NOTA FISCAL FATURA ELETRÔNICA DE SERVIÇOS DE COMUNICAÇÃO – NFCOM + ≡ D730 Registro Analítico Nota Fiscal Fatura Eletrônica de Serviços de Comunicação – NFCom + ≡ D731 + ≡ D735 Observações do lançamento fiscal + ≡ D737 + + - D750 ESCRITURAÇÃO CONSOLIDADA DA NOTA FISCAL FATURA ELETRÔNICA DE SERVIÇOS DE COMUNICAÇÃO + ≡ D760 Registro Analítico da escrituração consolidada da nota fiscal fatura eletrônica de serviços + - D761 + + + + - E100 PERÍODO DE APURAÇÃO DO ICMS + - E110 Apuração do ICMS + ≡ E111 + ≡ E112 + ≡ E113 + ≡ E115 + ≡ E116 + + - E200 PERÍODO DE APURAÇÃO DO ICMS + - E210 Apuração do ICMS + - E230 + - E240 + ≡ E250 + + - E300 PERÍODO DE APURAÇÃO DO ICMS DIFERENCIAL DE ALÍQUOTA – UF ORIGEM/DESTINO EC 87/15 + - E310 Apuração do ICMS Diferencial de Alíquota – UF Origem/Destino EC 87/15 + ≡ E311 + ≡ E312 + ≡ E313 + ≡ E316 + + - E500 PERÍODO DE APURAÇÃO DO IPI + ≡ E510 Consolidação dos Valores de IPI + - E520 Apuração do IPI + ≡ E530 + ≡ E531 + + + + - G110 ICMS - ATIVO PERMANENTE - CIAP + - G126 + - G130 + ≡ G140 + + + + - H005 TOTAIS DO INVENTÁRIO + ≡ H010 Inventário + ≡ H020 + - H030 + + + + - K010 INFORMAÇÃO SOBRE O TIPO DE LEIAUTE + + - K100 PERÍODO DE APURAÇÃO DO ICMS/IPI + ≡ K200 Estoque Escriturado + ≡ K210 Desmontagem de mercadorias – Item de Origem + ≡ K215 + ≡ K220 Outras Movimentações Internas entre Mercadorias + ≡ K230 Itens Produzidos + ≡ K235 + ≡ K250 Industrialização Efetuada por Terceiros – Itens Produzidos + ≡ K255 + ≡ K260 Reprocessamento/Reparo de Produto/Insumo + ≡ K265 + ≡ K270 Correção de Apontamento dos Registros K210 + ≡ K275 + ≡ K280 Correção de Apontamento – Estoque Escriturado + ≡ K290 Produção Conjunta – Ordem de Produção + ≡ K291 + ≡ K292 + ≡ K301 + ≡ K302 + + + + - 1010 OBRIGATORIEDADE DE REGISTROS DO BLOCO 1 + + - 1100 REGISTRO DE INFORMAÇÕES SOBRE EXPORTAÇÃO + ≡ 1105 Documentos Fiscais de Exportação + ≡ 1110 + + - 1200 CONTROLE DE CRÉDITOS FISCAIS - ICMS + ≡ 1210 Utilização de Créditos Fiscais + + - 1250 INFORMAÇÕES CONSOLIDADAS DE SALDOS DE RESTITUIÇÃO + ≡ 1255 Informações consolidadas de saldos de restituição + + - 1300 MOVIMENTAÇÃO DIÁRIA DE COMBUSTÍVEIS + ≡ 1310 Movimentação diária de combustíveis por tanque + ≡ 1320 + + - 1350 BOMBAS + ≡ 1360 Lacres das bombas + ≡ 1370 Bicos da bomba + + - 1390 CONTROLE DE PRODUÇÃO DE USINA + - 1391 Produção diária da usina + + - 1400 INFORMAÇÃO SOBRE VALOR AGREGADO + + - 1500 NOTA FISCAL/CONTA DE ENERGIA ELÉTRICA + ≡ 1510 Itens do documento Nota fiscal/Conta de energia elétrica + + - 1600 TOTAL DAS OPERAÇÕES COM CARTÃO DE CRÉDITO E/OU DÉBITO + + - 1601 OPERAÇÕES COM INSTRUMENTOS DE PAGAMENTOS ELETRÔNICOS + + - 1700 DOCUMENTOS FISCAIS UTILIZADOS + ≡ 1710 Documentos fiscais cancelados/inutilizados + + - 1800 DCTA + + - 1900 INDICADOR DE SUB-APURAÇÃO DO ICMS + ≡ 1910 Período da sub-apuração do ICMS + - 1920 + ≡ 1921 + ≡ 1922 + ≡ 1923 + ≡ 1925 + ≡ 1926 + + - 1960 GIAF 1 + + - 1970 GIAF 3 + ≡ 1975 GIAF 3 + + - 1980 GIAF 4 + + + + - 9900 REGISTROS DO ARQUIVO +""" + +import textwrap + +from odoo import fields, models + + +class Registro0000(models.AbstractModel): + "Abertura do Arquivo Digital e Identificação da entidade" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0000" + _inherit = "l10n_br_sped.declaration" + _sped_level = 0 + + COD_VER = fields.Char( + string="Código da versão do leiaute conforme", + xsd_type="numeric_code", + sped_length="3*", + help="Código da versão do leiaute conforme a tabela indicada no Ato Cotepe", + ) + + COD_FIN = fields.Char( + string="Código da finalidade do arquivo", + xsd_type="numeric_code", + sped_length="1", + help=( + "Código da finalidade do arquivo: 0 - Remessa do arquivo original 1 - " + "Remessa do arquivo substituto" + ), + ) + + DT_INI = fields.Date( + string="Data inicial das informações contidas no arquivo", sped_length="8*" + ) + + DT_FIN = fields.Date( + string="Data final das informações contidas no arquivo", sped_length="8*" + ) + + NOME = fields.Char(string="Nome empresarial da entidade", sped_length="1") + + CNPJ = fields.Char( + string="Número de inscrição da entidade no CNPJ", + xsd_type="numeric_code", + sped_length="14*", + ) + + CPF = fields.Char( + string="Número de inscrição da entidade no CPF", + xsd_type="numeric_code", + sped_length="11*", + ) + + UF = fields.Char( + string="Sigla da unidade da federação da entidade", sped_length="2*" + ) + + IE = fields.Char(string="Inscrição Estadual da entidade", sped_length="14") + + COD_MUN = fields.Char( + string="Código do município do domicílio fiscal", + xsd_type="numeric_code", + sped_length="7*", + help=( + "Código do município do domicílio fiscal da entidade, conforme a tabela " + "IBGE" + ), + ) + + IM = fields.Char(string="Inscrição Municipal da entidade") + + SUFRAMA = fields.Char(string="Inscrição da entidade na Suframa", sped_length="9*") + + IND_PERFIL = fields.Char( + string="Perfil de apresentação do arquivo fiscal", sped_length="1" + ) + + IND_ATIV = fields.Char( + string="Indicador de tipo de atividade", + xsd_type="numeric_code", + sped_length="1", + help=( + "Indicador de tipo de atividade: 0 - Industrial ou equiparado a industrial " + "1 - Outros" + ), + ) + + +class Registro0002(models.AbstractModel): + """Classificação do Estabelecimento Industrial ou Equiparado a + Industrial""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0002" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + CLAS_ESTAB_IND = fields.Char( + string="classificação do estabelecimento conforme tabela 4", + xsd_type="numeric_code", + sped_length="2", + help="classificação do estabelecimento conforme tabela 4.5.5", + ) + + +class Registro0005(models.AbstractModel): + "Dados Complementares da entidade" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0005" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + FANTASIA = fields.Char( + string="Nome de fantasia associado ao nome empresarial", sped_length="6" + ) + + CEP = fields.Char( + string="Código de Endereçamento Postal", + xsd_type="numeric_code", + sped_length="8*", + ) + + END = fields.Char(string="Logradouro e endereço do imóvel", sped_length="6") + + NUM = fields.Char(string="Número do imóvel", sped_length="1") + + COMPL = fields.Char(string="Dados complementares do endereço", sped_length="6") + + BAIRRO = fields.Char(string="Bairro em que o imóvel está situado", sped_length="6") + + FONE = fields.Char(string="Número do telefone", sped_length="11") + + FAX = fields.Char(string="Número do fax", sped_length="11") + + EMAIL = fields.Char(string="Endereço do correio eletrônico") + + +class Registro0015(models.AbstractModel): + "Dados do Contribuinte Substituto ou Responsável pelo ICMS Destino" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0015" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + UF_ST = fields.Char( + string="Sigla da unidade da federação", + sped_length="2*", + help=( + "Sigla da unidade da federação do contribuinte substituído ou unidade de " + "federação do consumidor final não contribuinte - ICMS Destino EC 87/15”" + ), + ) + + IE_ST = fields.Char( + string="Inscrição Estadual do contribuinte substituto", + sped_length="14", + help=( + "Inscrição Estadual do contribuinte substituto na unidade da federação do " + "contribuinte substituído ou unidade de federação do consumidor final não " + "contribuinte - ICMS Destino EC 87/15" + ), + ) + + +class Registro0100(models.AbstractModel): + "Dados do Contabilista" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0100" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + NOME = fields.Char(string="Nome do contabilista", sped_length="1") + + CPF = fields.Char( + string="Número de inscrição do contabilista no CPF", + xsd_type="numeric_code", + sped_length="11*", + ) + + CRC = fields.Char( + string="Número de inscrição do contabilista", + sped_length="15", + help=( + "Número de inscrição do contabilista no Conselho Regional de Contabilidade" + ), + ) + + CNPJ = fields.Char( + string="Número de inscrição do escritório de contabilidade", + xsd_type="numeric_code", + sped_length="14*", + help="Número de inscrição do escritório de contabilidade no CNPJ, se houver", + ) + + CEP = fields.Char( + string="Código de Endereçamento Postal", + xsd_type="numeric_code", + sped_length="8*", + ) + + END = fields.Char(string="Logradouro e endereço do imóvel", sped_length="6") + + NUM = fields.Char(string="Número do imóvel", sped_length="1") + + COMPL = fields.Char(string="Dados complementares do endereço", sped_length="6") + + BAIRRO = fields.Char(string="Bairro em que o imóvel está situado", sped_length="6") + + FONE = fields.Char(string="Número do telefone", sped_length="11") + + FAX = fields.Char(string="Número do fax", sped_length="11") + + EMAIL = fields.Char(string="Endereço do correio eletrônico") + + COD_MUN = fields.Char( + string="Código do município", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município, conforme tabela IBGE", + ) + + +class Registro0150(models.AbstractModel): + "Tabela de Cadastro do Participante" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0150" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_PART = fields.Char( + string="Código de identificação do participante no arquivo", sped_length="6" + ) + + NOME = fields.Char( + string="Nome pessoal ou empresarial do participante", sped_length="1" + ) + + COD_PAIS = fields.Char( + string="Código do país do participante", + xsd_type="numeric_code", + sped_length="5", + help=( + "Código do país do participante, conforme a tabela indicada no item 3.2.1" + ), + ) + + CNPJ = fields.Char( + string="CNPJ do participante", xsd_type="numeric_code", sped_length="14*" + ) + + CPF = fields.Char( + string="CPF do participante", xsd_type="numeric_code", sped_length="11*" + ) + + IE = fields.Char(string="Inscrição Estadual do participante", sped_length="14") + + COD_MUN = fields.Char( + string="Código do município", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município, conforme a tabela IBGE", + ) + + SUFRAMA = fields.Char( + string="Número de inscrição do participante na Suframa", sped_length="9*" + ) + + END = fields.Char(string="Logradouro e endereço do imóvel", sped_length="6") + + NUM = fields.Char(string="Número do imóvel", sped_length="1") + + COMPL = fields.Char(string="Dados complementares do endereço", sped_length="6") + + BAIRRO = fields.Char(string="Bairro em que o imóvel está situado", sped_length="6") + + reg_0175_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.0175", + "reg_0175_ids_Registro0150_id", + string="0175 Alteração da Tabela de Cadastro", + sped_card="1:N", + help="0175 Alteração da Tabela de Cadastro de Participante", + ) + + +class Registro0175(models.AbstractModel): + "Alteração da Tabela de Cadastro de Participante" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0175" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_ALT = fields.Date(string="Data de alteração do cadastro", sped_length="8*") + + NR_CAMPO = fields.Char( + string="Número do campo alterado", + sped_length="2", + help="Número do campo alterado (campos 03 a 13, exceto 07)", + ) + + CONT_ANT = fields.Char(string="Conteúdo anterior do campo", sped_length="1") + + reg_0175_ids_Registro0150_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.0150", + string="Tabela de Cadastro do Participante", + required=True, + ondelete="cascade", + ) + + +class Registro0190(models.AbstractModel): + "Identificação das unidades de medida" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0190" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + UNID = fields.Char(string="Código da unidade de medida", sped_length="6") + + DESCR = fields.Char(string="Descrição da unidade de medida") + + +class Registro0200(models.AbstractModel): + "Tabela de Identificação do Item (Produtos e Serviços)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0200" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_ITEM = fields.Char(string="Código do item", sped_length="6") + + DESCR_ITEM = fields.Char(string="Descrição do item") + + COD_BARRA = fields.Char( + string="Representação alfanumérico do código de barra", + help="Representação alfanumérico do código de barra do produto, se houver", + ) + + COD_ANT_ITEM = fields.Char( + string="Código anterior do item com relação", + sped_length="6", + help="Código anterior do item com relação à última informação apresentada", + ) + + UNID_INV = fields.Char( + string="Unidade de medida utilizada na quantificação", + sped_length="6", + help="Unidade de medida utilizada na quantificação de estoques.", + ) + + TIPO_ITEM = fields.Char( + string="Tipo do item", + xsd_type="numeric_code", + sped_length="2", + help=( + "Tipo do item - Atividades Industriais, Comerciais e Serviços: 00 - " + "Mercadoria para Revenda; 01 - Matéria Prima; 02 - Embalagem; 03 - Produto " + "em Processo; 04 - Produto Acabado; 05 - Subproduto; 06 - Produto " + "Intermediário; 07 - Material de Uso e Consumo; 08 - Ativo Imobilizado; 09 " + "- Serviços; 10 - Outros insumos; 99 – Outras" + ), + ) + + COD_NCM = fields.Char( + string="Código da Nomenclatura Comum do Mercosul", sped_length="8*" + ) + + EX_IPI = fields.Char(string="Código EX, conforme a TIPI", sped_length="3") + + COD_GEN = fields.Char( + string="Código do gênero do item", + xsd_type="numeric_code", + sped_length="2*", + help="Código do gênero do item, conforme a tabela 4.2.1", + ) + + COD_LST = fields.Char( + string="Código do serviço conforme lista do Anexo I", + sped_length="5", + help=( + "Código do serviço conforme lista do Anexo I da Lei Complementar Federal nº" + " 116/03." + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota de ICMS aplicável ao item", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Alíquota de ICMS aplicável ao item nas operações internas", + ) + + CEST = fields.Char( + string="Código Especificador da Substituição Tributária", + xsd_type="numeric_code", + sped_length="7*", + ) + + reg_0206_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.0206", + "reg_0206_ids_Registro0200_id", + string="0206 Código de produto conforme Tabela ANP", + sped_card="1:1", + ) + + reg_0205_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.0205", + "reg_0205_ids_Registro0200_id", + string="0205 Alteração do Item", + sped_card="1:N", + ) + + reg_0210_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.0210", + "reg_0210_ids_Registro0200_id", + string="0210 Consumo Específico Padronizado", + sped_card="1:N", + ) + + reg_0220_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.0220", + "reg_0220_ids_Registro0200_id", + string="0220 Fatores de Conversão de Unidades", + sped_card="1:N", + ) + + reg_0221_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.0221", + "reg_0221_ids_Registro0200_id", + string="0221 Correlação entre códigos", + sped_card="1:N", + help="0221 Correlação entre códigos de itens comercializados", + ) + + +class Registro0205(models.AbstractModel): + "Alteração do Item" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0205" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DESCR_ANT_ITEM = fields.Char(string="Descrição anterior do item") + + DT_INI = fields.Date( + string="Data inicial de utilização da descrição do item", sped_length="8*" + ) + + DT_FIM = fields.Date( + string="Data final de utilização da descrição do item", sped_length="8*" + ) + + COD_ANT_ITEM = fields.Char( + string="Código anterior do item com relação", + sped_length="6", + help="Código anterior do item com relação à última informação apresentada", + ) + + reg_0205_ids_Registro0200_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.0200", + string="Tabela de Identificação do Item", + required=True, + ondelete="cascade", + help="Tabela de Identificação do Item (Produtos e Serviços)", + ) + + +class Registro0206(models.AbstractModel): + "Código de produto conforme Tabela ANP" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0206" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_COMB = fields.Char( + string="Código do produto", + help="Código do produto, conforme tabela publicada pela ANP", + ) + + reg_0206_ids_Registro0200_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.0200", + string="Tabela de Identificação do Item", + required=True, + ondelete="cascade", + help="Tabela de Identificação do Item (Produtos e Serviços)", + ) + + +class Registro0210(models.AbstractModel): + "Consumo Específico Padronizado" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0210" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + reg_0210_ids_Registro0200_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.0200", + string="Tabela de Identificação do Item", + required=True, + ondelete="cascade", + help="Tabela de Identificação do Item (Produtos e Serviços)", + ) + + +class Registro0220(models.AbstractModel): + "Fatores de Conversão de Unidades" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0220" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + UNID_CONV = fields.Char( + string="Unidade comercial a ser convertida na unidade", + sped_length="6", + help=( + "Unidade comercial a ser convertida na unidade de estoque, referida no " + "registro 0200" + ), + ) + + FAT_CONV = fields.Float( + string="Fator de conversão", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Fator de conversão: fator utilizado para converter (multiplicar) a unidade" + " a ser convertida na unidade adotada no inventário" + ), + ) + + COD_BARRA = fields.Char( + string="Representação alfanumérica do código de barra", + help=( + "Representação alfanumérica do código de barra da unidade comercial do " + "produto, se houver" + ), + ) + + reg_0220_ids_Registro0200_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.0200", + string="Tabela de Identificação do Item", + required=True, + ondelete="cascade", + help="Tabela de Identificação do Item (Produtos e Serviços)", + ) + + +class Registro0221(models.AbstractModel): + "Correlação entre códigos de itens comercializados" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0221" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_ITEM_ATOMICO = fields.Char( + string="código do item atômico contido no item informado", + sped_length="6", + help="código do item atômico contido no item informado no 0200 Pai.", + ) + + QTD_CONTIDA = fields.Float( + string="Informar quantos itens atômicos estão contidos", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Informar quantos itens atômicos estão contidos no item informado no 0200 " + "Pai." + ), + ) + + reg_0221_ids_Registro0200_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.0200", + string="Tabela de Identificação do Item", + required=True, + ondelete="cascade", + help="Tabela de Identificação do Item (Produtos e Serviços)", + ) + + +class Registro0300(models.AbstractModel): + "Cadastro de bens ou componentes do Ativo Imobilizado" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0300" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_IND_BEM = fields.Char( + string="Código individualizado do bem", + sped_length="6", + help=( + "Código individualizado do bem ou componente adotado no controle " + "patrimonial do estabelecimento informante" + ), + ) + + IDENT_MERC = fields.Char( + string="Identificação do tipo de mercadoria", + sped_length="1*", + help="Identificação do tipo de mercadoria: 1 = bem 2 = componente", + ) + + DESCR_ITEM = fields.Char( + string="Descrição do bem ou componente", + help=( + "Descrição do bem ou componente (modelo, marca e outras características " + "necessárias a sua individualização)" + ), + ) + + COD_PRNC = fields.Char( + string="Código de cadastro do bem principal nos casos", + sped_length="6", + help=( + "Código de cadastro do bem principal nos casos em que o bem ou componente (" + " campo 02) esteja vinculado a um bem principal" + ), + ) + + COD_CTA = fields.Char( + string="Código da conta analítica de contabilização do bem", + sped_length="6", + help=( + "Código da conta analítica de contabilização do bem ou componente (campo 06" + " do Registro 0500)" + ), + ) + + NR_PARC = fields.Char( + string="Número total de parcelas a serem apropriadas", + xsd_type="numeric_code", + sped_length="3", + help=( + "Número total de parcelas a serem apropriadas, segundo a legislação de cada" + " unidade federada" + ), + ) + + reg_0305_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.0305", + "reg_0305_ids_Registro0300_id", + string="0305 Informação sobre a Utilização do Bem", + sped_card="1:1", + ) + + +class Registro0305(models.AbstractModel): + "Informação sobre a Utilização do Bem" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0305" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_CCUS = fields.Char( + string="Código do centro de custo onde o bem está sendo", + sped_length="6", + help=( + "Código do centro de custo onde o bem está sendo ou será utilizado (campo " + "03 do Registro 0600)" + ), + ) + + FUNC = fields.Char( + string="Descrição sucinta da função do bem na atividade", + help="Descrição sucinta da função do bem na atividade do estabelecimento", + ) + + VIDA_UTIL = fields.Char( + string="Vida útil estimada do bem", + xsd_type="numeric_code", + sped_length="3", + help="Vida útil estimada do bem, em número de meses", + ) + + reg_0305_ids_Registro0300_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.0300", + string="Cadastro de bens ou componentes", + required=True, + ondelete="cascade", + help="Cadastro de bens ou componentes do Ativo Imobilizado", + ) + + +class Registro0400(models.AbstractModel): + "Tabela de Natureza da Operação/ Prestação" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0400" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_NAT = fields.Char( + string="Código da natureza da operação/prestação", sped_length="1" + ) + + DESCR_NAT = fields.Char(string="Descrição da natureza da operação/prestação") + + +class Registro0450(models.AbstractModel): + "Tabela de Informação Complementar do documento fiscal" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0450" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_INF = fields.Char( + string="Código da informação complementar", + sped_length="6", + help="Código da informação complementar do documento fiscal", + ) + + TXT = fields.Char( + string="Texto livre da informação complementar existente", + help=( + "Texto livre da informação complementar existente no documento fiscal, " + "inclusive espécie de normas legais, poder normativo, número, capitulação, " + "data e demais referências pertinentes com indicações referentes ao tributo" + ), + ) + + +class Registro0460(models.AbstractModel): + "Tabela de Observações do Lançamento Fiscal" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0460" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", sped_length="6" + ) + + TXT = fields.Char( + string="Descrição da observação vinculada", + help="Descrição da observação vinculada ao lançamento fiscal", + ) + + +class Registro0500(models.AbstractModel): + "Plano de contas contábeis" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0500" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + DT_ALT = fields.Date(string="Data da inclusão/alteração", sped_length="8*") + + COD_NAT_CC = fields.Char( + string="Código da natureza da conta/grupo de contas", + sped_length="2*", + help=( + "Código da natureza da conta/grupo de contas: 01 - Contas de ativo 02 - " + "Contas de passivo 03 - Patrimônio líquido 04 - Contas de resultado 05 - " + "Contas de compensação 09 – Outras" + ), + ) + + IND_CTA = fields.Char( + string="Indicador do tipo de conta: S", + sped_length="1*", + help=( + "Indicador do tipo de conta: S - Sintética (grupo de contas) A - Analítica " + "(conta)" + ), + ) + + NIVEL = fields.Char( + string="Nível da conta analítica/grupo de contas", + xsd_type="numeric_code", + sped_length="5", + ) + + COD_CTA = fields.Char( + string="Código da conta analítica/grupo de contas", sped_length="6" + ) + + NOME_CTA = fields.Char( + string="Nome da conta analítica/grupo de contas", sped_length="6" + ) + + +class Registro0600(models.AbstractModel): + "Centro de custos" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.0600" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + DT_ALT = fields.Date(string="Data da inclusão/alteração", sped_length="8*") + + COD_CCUS = fields.Char(string="Código do centro de custos", sped_length="6") + + CCUS = fields.Char(string="Nome do centro de custos", sped_length="6") + + +class RegistroB020(models.AbstractModel): + """Nota Fiscal (código 01), Nota Fiscal de Serviços (código 03), Nota + Fiscal de Serviços Avulsa (código 3B), Nota Fiscal de Produtor (código + 04), Conhecimento de Transporte Rodoviário de Cargas (código 08), NF-e + (código 55), NFC-e (código 65) e NF3-e (Código 66)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.b020" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_OPER = fields.Char( + string="Indicador do tipo de operação", + sped_length="1*", + help="Indicador do tipo de operação: 0- Aquisição 1- Prestação", + ) + + IND_EMIT = fields.Char( + string="Indicador do emitente do documento fiscal", + sped_length="1*", + help=( + "Indicador do emitente do documento fiscal: 0- Emissão própria 1- Terceiros" + ), + ) + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): do prestador, no caso " + "de declarante na condição de tomador do tomador, no caso de declarante na " + "condição de prestador" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.3", + ) + + COD_SIT = fields.Char( + string="Código da situação do documento conforme tabela 4", + xsd_type="numeric_code", + sped_length="2*", + help="Código da situação do documento conforme tabela 4.1.2", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="3") + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + CHV_NFE = fields.Char( + string="Chave da Nota Fiscal Eletrônica", + xsd_type="numeric_code", + sped_length="44*", + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + COD_MUN_SERV = fields.Char( + string="Código do município onde o serviço foi prestado", + sped_length="7*", + help=( + "Código do município onde o serviço foi prestado, conforme a tabela IBGE" + ), + ) + + VL_CONT = fields.Monetary( + string="Valor contábil", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor contábil (valor total do documento)", + ) + + VL_MAT_TERC = fields.Monetary( + string="Valor do material fornecido por terceiros", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor do material fornecido por terceiros na prestação do serviço", + ) + + VL_SUB = fields.Monetary( + string="Valor da subempreitada", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ISNT_ISS = fields.Monetary( + string="Valor das operações isentas ou não-tributadas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor das operações isentas ou não-tributadas pelo ISS", + ) + + VL_DED_BC = fields.Monetary( + string="Valor da dedução da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ISS = fields.Monetary( + string="Valor da base de cálculo do ISS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ISS_RT = fields.Monetary( + string="Valor da base de cálculo de retenção do ISS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ISS_RT = fields.Monetary( + string="Valor do ISS retido pelo tomador", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ISS = fields.Monetary( + string="Valor do ISS destacado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + COD_INF_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_B025_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.b025", + "reg_B025_ids_RegistroB020_id", + string="B025 Detalhamento por combinação de alíquota", + sped_card="1:N", + help=( + "B025 Detalhamento por combinação de alíquota e item da lista de serviços " + "da Lei Complementar nº 116/2003" + ), + ) + + +class RegistroB025(models.AbstractModel): + """Detalhamento por combinação de alíquota e item da lista de serviços da + Lei Complementar nº 116/2003""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.b025" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + VL_CONT_P = fields.Monetary( + string="Parcela correspondente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor Contábil' referente à combinação da " + "alíquota e item da lista" + ), + ) + + VL_BC_ISS_P = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ISS' referente à " + "combinação da alíquota e item da lista" + ), + ) + + ALIQ_ISS = fields.Float( + string="Alíquota do ISS", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ISS_P = fields.Monetary( + string="Parcela correspondente ao 'Valor do ISS' referente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ISS' referente à combinação da " + "alíquota e item da lista" + ), + ) + + VL_ISNT_ISS_P = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor das operações isentas ou não-tributadas " + "pelo ISS' referente à combinação da alíquota e item da lista" + ), + ) + + COD_SERV = fields.Char( + string="Item da lista de serviços", + sped_length="4*", + help="Item da lista de serviços, conforme tabela 4.6.3", + ) + + reg_B025_ids_RegistroB020_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.b020", + string="Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Nota Fiscal (código 01), Nota Fiscal de Serviços (código 03), Nota Fiscal " + "de Serviços Avulsa (código 3B), Nota Fiscal de Produtor (código 04), " + "Conhecimento de Transporte Rodoviário de Cargas (código 08), NF-e (código " + "55), NFC-e (código 65) e NF3-e (Código 66)" + ), + ) + + +class RegistroB030(models.AbstractModel): + "Nota fiscal de Serviços Simplificada (código 3A)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.b030" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.3", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="3") + + NUM_DOC_INI = fields.Char( + string="Número do primeiro documento fiscal emitido no dia", + xsd_type="numeric_code", + sped_length="9", + ) + + NUM_DOC_FIN = fields.Char( + string="Número do último documento fiscal emitido no dia", + xsd_type="numeric_code", + sped_length="9", + ) + + DT_DOC = fields.Date( + string="Data da emissão dos documentos fiscais", sped_length="8*" + ) + + QTD_CANC = fields.Integer(string="Quantidade de documentos cancelados") + + VL_CONT = fields.Monetary( + string="Valor contábil", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor contábil (valor total acumulado dos documentos)", + ) + + VL_ISNT_ISS = fields.Monetary( + string="Valor acumulado das operações isentas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor acumulado das operações isentas ou não-tributadas pelo ISS", + ) + + VL_BC_ISS = fields.Monetary( + string="Valor acumulado da base de cálculo do ISS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ISS = fields.Monetary( + string="Valor acumulado do ISS destacado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + COD_INF_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_B035_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.b035", + "reg_B035_ids_RegistroB030_id", + string="B035 Detalhamento por combinação de alíquota", + sped_card="1:N", + help=( + "B035 Detalhamento por combinação de alíquota e item da lista de serviços " + "da Lei Complementar nº 116/2003" + ), + ) + + +class RegistroB035(models.AbstractModel): + """Detalhamento por combinação de alíquota e item da lista de serviços da + Lei Complementar nº 116/2003""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.b035" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + VL_CONT_P = fields.Monetary( + string="Parcela correspondente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor Contábil' referente à combinação da " + "alíquota e item da lista" + ), + ) + + VL_BC_ISS_P = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ISS' referente à " + "combinação da alíquota e item da lista" + ), + ) + + ALIQ_ISS = fields.Float( + string="Alíquota do ISS", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ISS_P = fields.Monetary( + string="Parcela correspondente ao 'Valor do ISS' referente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ISS' referente à combinação da " + "alíquota e item da lista" + ), + ) + + VL_ISNT_ISS_P = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor das operações isentas ou não-tributadas " + "pelo ISS' referente à combinação da alíquota e item da lista" + ), + ) + + COD_SERV = fields.Char( + string="Item da lista de serviços", + sped_length="4*", + help="Item da lista de serviços, conforme tabela 4.6.3", + ) + + reg_B035_ids_RegistroB030_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.b030", + string="Nota fiscal de Serviços Simplificada", + required=True, + ondelete="cascade", + help="Nota fiscal de Serviços Simplificada (código 3A)", + ) + + +class RegistroB350(models.AbstractModel): + "Serviços prestados por instituições financeiras" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.b350" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_CTD = fields.Char(string="Código da conta do plano de contas") + + CTA_ISS = fields.Char(string="Descrição da conta no plano de contas") + + CTA_COSIF = fields.Char( + string="Código COSIF a que está subordinada a conta do ISS", + xsd_type="numeric_code", + sped_length="8*", + help=( + "Código COSIF a que está subordinada a conta do ISS das instituições " + "financeiras" + ), + ) + + QTD_OCOR = fields.Integer(string="Quantidade de ocorrências na conta") + + COD_SERV = fields.Char( + string="Item da lista de serviços", + xsd_type="numeric_code", + sped_length="4*", + help="Item da lista de serviços, conforme tabela 4.6.3", + ) + + VL_CONT = fields.Monetary( + string="Valor contábil", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_BC_ISS = fields.Monetary( + string="Valor da base de cálculo do ISS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ISS = fields.Float( + string="Alíquota do ISS", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ISS = fields.Monetary( + string="Valor do ISS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + COD_INF_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + +class RegistroB420(models.AbstractModel): + """Totalização dos valores de serviços prestados por combinação de alíquota + e item da lista de serviços da Lei Complementar nº 116/2003""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.b420" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + VL_CONT = fields.Monetary( + string="Totalização do Valor Contábil das prestações", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Totalização do Valor Contábil das prestações do declarante referente à " + "combinação da alíquota e item da lista" + ), + ) + + VL_BC_ISS = fields.Monetary( + string="Totalização do Valor da base de cálculo do ISS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Totalização do Valor da base de cálculo do ISS das prestações do " + "declarante referente à combinação da alíquota e item da lista" + ), + ) + + ALIQ_ISS = fields.Float( + string="Alíquota do ISS", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ISNT_ISS = fields.Monetary( + string="Totalização do valor das operações isentas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Totalização do valor das operações isentas ou não-tributadas pelo ISS " + "referente à combinação da alíquota e item da lista" + ), + ) + + VL_ISS = fields.Monetary( + string="Totalização", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Totalização, por combinação da alíquota e item da lista, do valor do ISS" + ), + ) + + COD_SERV = fields.Char( + string="Item da lista de serviços", + help="Item da lista de serviços, conforme tabela 4.6.3", + ) + + +class RegistroB440(models.AbstractModel): + "Totalização dos valores retidos" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.b440" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_OPER = fields.Char( + string="Indicador do tipo de operação", + xsd_type="numeric_code", + help="Indicador do tipo de operação: 0 - Aquisição 1 – Prestação", + ) + + COD_PART = fields.Char( + string="Código do participante", + help=( + "Código do participante (campo 02 do Registro 0150): - do prestador, no " + "caso de aquisição de serviço pelo declarante - do tomador, no caso de " + "prestação de serviço pelo declarante" + ), + ) + + VL_CONT_RT = fields.Monetary( + string="Totalização do valor contábil", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Totalização do valor contábil das prestações e/ou aquisições do declarante" + " pela combinação de tipo de operação e participante." + ), + ) + + VL_BC_ISS_RT = fields.Monetary( + string="Totalização do valor da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Totalização do valor da base de cálculo de retenção do ISS das prestações " + "e/ou aquisições do declarante pela combinação de tipo de operação e " + "participante" + ), + ) + + VL_ISS_RT = fields.Monetary( + string="Totalização do valor do ISS retido pelo tomador", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Totalização do valor do ISS retido pelo tomador das prestações e/ou " + "aquisições do declarante pela combinação de tipo de operação e " + "participante" + ), + ) + + +class RegistroB460(models.AbstractModel): + "Deduções do ISS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.b460" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_DED = fields.Char( + string="Indicador do tipo de dedução", + sped_length="1*", + help=( + "Indicador do tipo de dedução: 0 - Compensação do ISS calculado a maior 1 -" + " Benefício fiscal por incentivo à cultura 2 - Decisão administrativa ou " + "judicial 9 – Outros" + ), + ) + + VL_DED = fields.Monetary( + string="Valor da dedução", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + NUM_PROC = fields.Char( + string="Número do processo ao qual o ajuste está vinculado", + help="Número do processo ao qual o ajuste está vinculado, se houver", + ) + + IND_PROC = fields.Char( + string="Indicador da origem do processo", + sped_length="1*", + help=( + "Indicador da origem do processo: 0 - Sefin 1 - Justiça Federal 2 - Justiça" + " Estadual 9 – Outros" + ), + ) + + PROC = fields.Char(string="Descrição do processo que embasou o lançamento") + + COD_INF_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + IND_OBR = fields.Char( + string="Indicador da obrigação onde será aplicada", + sped_length="1*", + help=( + "Indicador da obrigação onde será aplicada a dedução: 0 - ISS Próprio 1 - " + "ISS Substituto (devido pelas aquisições de serviços do declarante) 2 - ISS" + " Uniprofissionais" + ), + ) + + +class RegistroB470(models.AbstractModel): + "Apuração do ISS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.b470" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + VL_CONT = fields.Monetary( + string="A", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="A - Valor total referente às prestações de serviço do período", + ) + + VL_MAT_TERC = fields.Monetary( + string="B", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "B - Valor total do material fornecido por terceiros na prestação do " + "serviço" + ), + ) + + VL_MAT_PROP = fields.Monetary( + string="C", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="C - Valor do material próprio utilizado na prestação do serviço", + ) + + VL_SUB = fields.Monetary( + string="D - Valor total das subempreitadas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ISNT = fields.Monetary( + string="E", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="E - Valor total das operações isentas ou não-tributadas pelo ISS", + ) + + VL_DED_BC = fields.Monetary( + string="F", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="F - Valor total das deduções da base de cálculo (B + C + D + E)", + ) + + VL_BC_ISS = fields.Monetary( + string="G", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="G - Valor total da base de cálculo do ISS", + ) + + VL_BC_ISS_RT = fields.Monetary( + string="H", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "H - Valor total da base de cálculo de retenção do ISS referente às " + "prestações do declarante" + ), + ) + + VL_ISS = fields.Monetary( + string="I - Valor total do ISS destacado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ISS_RT = fields.Monetary( + string="J", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "J - Valor total do ISS retido pelo tomador nas prestações do declarante" + ), + ) + + VL_DED = fields.Monetary( + string="K", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="K - Valor total das deduções do ISS próprio", + ) + + VL_ISS_REC = fields.Monetary( + string="L", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="L - Valor total apurado do ISS próprio a recolher (I - J - K)", + ) + + VL_ISS_ST = fields.Monetary( + string="M", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "M - Valor total do ISS substituto a recolher pelas aquisições do " + "declarante (tomador)" + ), + ) + + VL_ISS_REC_UNI = fields.Monetary( + string="N", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="N - Valor do ISS próprio a recolher pela sociedade uniprofissional", + ) + + +class RegistroB500(models.AbstractModel): + "Apuração do ISS sociedade uniprofissional" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.b500" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + VL_REC = fields.Monetary( + string="Valor mensal das receitas auferidas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor mensal das receitas auferidas pela sociedade uniprofissional", + ) + + QTD_PROF = fields.Integer(string="Quantidade de profissionais habilitados") + + VL_OR = fields.Monetary( + string="Valor do ISS devido", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_B510_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.b510", + "reg_B510_ids_RegistroB500_id", + string="B510 Uniprofissional – empregados e sócios", + sped_card="V", + ) + + +class RegistroB510(models.AbstractModel): + "Uniprofissional – empregados e sócios" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.b510" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + IND_PROF = fields.Char( + string="Indicador de habilitação", + sped_length="1*", + help=( + "Indicador de habilitação: 0- Profissional habilitado 1- Profissional não " + "habilitado" + ), + ) + + IND_ESC = fields.Char( + string="Indicador de escolaridade", + sped_length="1*", + help="Indicador de escolaridade: 0- Nível superior 1- Nível médio", + ) + + IND_SOC = fields.Char( + string="Indicador de participação societária", + sped_length="1*", + help="Indicador de participação societária: 0- Sócio 1- Não sócio", + ) + + CPF = fields.Char( + string="Número de inscrição do profissional no CPF", + xsd_type="numeric_code", + sped_length="11*", + ) + + NOME = fields.Char(string="Nome do profissional", sped_length="1") + + reg_B510_ids_RegistroB500_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.b500", + string="Apuração do ISS sociedade uniprofissional", + required=True, + ondelete="cascade", + ) + + +class RegistroC100(models.AbstractModel): + """Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), + Nota Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código + 55), Nota Fiscal Eletrônica ao Consumidor Final (código 65)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c100" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_OPER = fields.Char( + string="Indicador do tipo de operação", + sped_length="1*", + help="Indicador do tipo de operação: 0 - Entrada 1 – Saída", + ) + + IND_EMIT = fields.Char( + string="Indicador do emitente do documento fiscal", + sped_length="1*", + help=( + "Indicador do emitente do documento fiscal: 0 - Emissão própria 1 – " + "Terceiros" + ), + ) + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): do emitente do " + "documento ou do remetente das mercadorias, no caso de entradas do " + "adquirente, no caso de saídas" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + COD_SIT = fields.Char( + string="Código da situação do documento fiscal", + xsd_type="numeric_code", + sped_length="2*", + help="Código da situação do documento fiscal, conforme a tabela 4.1.2", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="3") + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + CHV_NFE = fields.Char( + string="Chave da Nota Fiscal Eletrônica", + xsd_type="numeric_code", + sped_length="44*", + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + DT_E_S = fields.Date(string="Data da entrada ou da saída", sped_length="8*") + + VL_DOC = fields.Monetary( + string="Valor total do documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + IND_PGTO = fields.Char( + string="Indicador do tipo de pagamento", + sped_length="1*", + help="Indicador do tipo de pagamento: 0 - À vista 1 - A prazo 2 – Outros", + ) + + VL_DESC = fields.Monetary( + string="Valor total do desconto", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ABAT_NT = fields.Monetary( + string="Abatimento não tributado e não comercial Ex", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Abatimento não tributado e não comercial Ex. desconto ICMS nas remessas " + "para ZFM" + ), + ) + + VL_MERC = fields.Monetary( + string="Valor total das mercadorias e serviços", + in_required=True, + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + IND_FRT = fields.Char( + string="Indicador do tipo de frete", + sped_length="1*", + help=( + "Indicador do tipo de frete: 0 - contratação do frete por conta do " + "remetente (CIF) 1 - contratação do frete por conta do destinatário (FOB) 2" + " - contratação do frete por conta de terceiros 3 - transporte próprio por " + "conta do remetente 4 - transporte próprio por conta do destinatário 9 - " + "sem ocorrência de transporte" + ), + ) + + VL_FRT = fields.Monetary( + string="Valor do frete indicado no documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SEG = fields.Monetary( + string="Valor do seguro indicado no documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUT_DA = fields.Monetary( + string="Valor de outras despesas acessórias", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Valor da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da base de cálculo do ICMS substituição tributária", + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor do ICMS retido por substituição tributária", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_IPI = fields.Monetary( + string="Valor total do IPI", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS = fields.Monetary( + string="Valor total do PIS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_COFINS = fields.Monetary( + string="Valor total da COFINS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS_ST = fields.Monetary( + string="Valor total do PIS retido", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total do PIS retido por substituição tributária", + ) + + VL_COFINS_ST = fields.Monetary( + string="Valor total da COFINS retida", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total da COFINS retida por substituição tributária", + ) + + reg_C101_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c101", + "reg_C101_ids_RegistroC100_id", + string="C101 Informação complementar", + sped_card="1:1", + help=( + "C101 Informação complementar dos documentos fiscais quando das operações " + "interestaduais destinadas a consumidor final não contribuinte - EC 87/15 " + "(Código 55)" + ), + ) + + reg_C105_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c105", + "reg_C105_ids_RegistroC100_id", + string="C105 Operações com ICMS ST recolhido", + sped_card="1:1", + help=( + "C105 Operações com ICMS ST recolhido para UF diversa do destinatário do " + "documento fiscal (Código 55)" + ), + ) + + reg_C130_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c130", + "reg_C130_ids_RegistroC100_id", + string="C130 Complemento de Documento", + sped_card="1:1", + help="C130 Complemento de Documento - ISSQN, IRRF e Previdência", + ) + + reg_C140_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c140", + "reg_C140_ids_RegistroC100_id", + string="C140 Complemento de Documento", + sped_card="1:1", + help="C140 Complemento de Documento - Fatura (código 01)", + ) + + reg_C160_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c160", + "reg_C160_ids_RegistroC100_id", + string="C160 Complemento de Documento", + sped_card="1:1", + help=( + "C160 Complemento de Documento - Volumes Transportados (código 01 e 04) " + "Exceto Combustíveis" + ), + ) + + reg_C110_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c110", + "reg_C110_ids_RegistroC100_id", + string="C110 Complemento de Documento", + sped_card="1:N", + help=( + "C110 Complemento de Documento - Informação Complementar da Nota Fiscal " + "(código 01, 1B, 55)" + ), + ) + + reg_C120_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c120", + "reg_C120_ids_RegistroC100_id", + string="C120 Complemento de Documento", + sped_card="1:N", + help=( + "C120 Complemento de Documento - Operações de Importação (códigos 01 e 55)" + ), + ) + + reg_C165_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c165", + "reg_C165_ids_RegistroC100_id", + string="C165 Complemento de Documento", + sped_card="1:N", + help=("C165 Complemento de Documento - Operações com combustíveis (código 01)"), + ) + + reg_C170_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c170", + "reg_C170_ids_RegistroC100_id", + string="C170 Complemento de Documento", + sped_card="1:N", + help=( + "C170 Complemento de Documento - Itens do Documento (código 01, 1B, 04 e " + "55)" + ), + ) + + reg_C185_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c185", + "reg_C185_ids_RegistroC100_id", + string="C185 Informações complementares das operações", + sped_card="1:N", + help=( + "C185 Informações complementares das operações de saída de mercadorias " + "sujeitas à substituição tributária (código 01, 1B, 04 e 55)" + ), + ) + + reg_C186_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c186", + "reg_C186_ids_RegistroC100_id", + string="C186 Informações complementares das operações", + sped_card="1:N", + help=( + "C186 Informações complementares das operações de devolução de entradas de " + "mercadorias sujeitas à substituição tributária (código 01, 1b, 04 e 55)." + ), + ) + + reg_C190_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c190", + "reg_C190_ids_RegistroC100_id", + string="C190 Registro Analítico do Documento", + sped_card="1:N", + help="C190 Registro Analítico do Documento (código 01, 1B, 04, 55 e 65)", + ) + + reg_C195_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c195", + "reg_C195_ids_RegistroC100_id", + string="C195 Complemento do Registro Analítico", + sped_card="1:N", + help=( + "C195 Complemento do Registro Analítico - Observações do Lançamento Fiscal " + "(código 01, 1B, 04, 55 e 65)" + ), + ) + + +class RegistroC101(models.AbstractModel): + """Informação complementar dos documentos fiscais quando das operações + interestaduais destinadas a consumidor final não contribuinte - EC + 87/15 (Código 55)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c101" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + VL_FCP_UF_DEST = fields.Monetary( + string="Valor total relativo ao Fundo de Combate à Pobreza", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total relativo ao Fundo de Combate à Pobreza (FCP) da UF de destino" + ), + ) + + VL_ICMS_UF_DEST = fields.Monetary( + string="Valor total do ICMS Interestadual para a UF", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total do ICMS Interestadual para a UF de destino", + ) + + VL_ICMS_UF_REM = fields.Monetary( + string="VL_ICMS_UF_REM", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total do ICMS Interestadual para a UF do remetente", + ) + + reg_C101_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + +class RegistroC105(models.AbstractModel): + """Operações com ICMS ST recolhido para UF diversa do destinatário do + documento fiscal (Código 55)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c105" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + OPER = fields.Char( + string="Indicador do tipo de operação", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Indicador do tipo de operação: 0 - Combustíveis e Lubrificantes; 1 - " + "Leasing de veículos ou faturamento direto. 2 - Recusa de recebimento (de " + "acordo com as condições descritas nas instruções do Registro)" + ), + ) + + UF = fields.Char(string="Sigla da UF de destino do ICMS_ST", sped_length="2*") + + reg_C105_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + +class RegistroC110(models.AbstractModel): + """Complemento de Documento - Informação Complementar da Nota Fiscal + (código 01, 1B, 55)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c110" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_INF = fields.Char( + string="Código da informação complementar", + sped_length="6", + help=( + "Código da informação complementar do documento fiscal (campo 02 do " + "Registro 0450)" + ), + ) + + TXT_COMPL = fields.Char(string="Descrição complementar do código de referência") + + reg_C110_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + reg_C111_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c111", + "reg_C111_ids_RegistroC110_id", + string="C111 Complemento de Documento", + sped_card="1:N", + help="C111 Complemento de Documento - Processo referenciado", + ) + + reg_C112_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c112", + "reg_C112_ids_RegistroC110_id", + string="C112 Complemento de Documento", + sped_card="1:N", + help="C112 Complemento de Documento - Documento de Arrecadação Referenciado", + ) + + reg_C113_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c113", + "reg_C113_ids_RegistroC110_id", + string="C113 Complemento de Documento", + sped_card="1:N", + help="C113 Complemento de Documento - Documento Fiscal Referenciado", + ) + + reg_C114_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c114", + "reg_C114_ids_RegistroC110_id", + string="C114 Complemento de Documento", + sped_card="1:N", + help="C114 Complemento de Documento - Cupom Fiscal Referenciado", + ) + + reg_C115_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c115", + "reg_C115_ids_RegistroC110_id", + string="C115 Local de coleta e/ou entrega", + sped_card="1:N", + help="C115 Local de coleta e/ou entrega (CÓDIGOS 01, 1B e 04)", + ) + + reg_C116_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c116", + "reg_C116_ids_RegistroC110_id", + string="C116 Cupom Fiscal Eletrônico", + sped_card="1:N", + help="C116 Cupom Fiscal Eletrônico - CF-e referenciado", + ) + + +class RegistroC111(models.AbstractModel): + "Complemento de Documento - Processo referenciado" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c111" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + NUM_PROC = fields.Char( + string="Identificação do processo ou ato concessório", sped_length="6" + ) + + IND_PROC = fields.Char( + string="Indicador da origem do processo", + sped_length="1*", + help=( + "Indicador da origem do processo: 0- Sefaz 1 - Justiça Federal 2 - Justiça " + "Estadual" + ), + ) + + reg_C111_ids_RegistroC110_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c110", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=( + "Complemento de Documento - Informação Complementar da Nota Fiscal (código " + "01, 1B, 55)" + ), + ) + + +class RegistroC112(models.AbstractModel): + "Complemento de Documento - Documento de Arrecadação Referenciado" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c112" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_DA = fields.Char( + string="Código do modelo do documento de arrecadação", + sped_length="1*", + help=( + "Código do modelo do documento de arrecadação: 0 - Documento estadual de " + "arrecadação 1 – GNRE" + ), + ) + + UF = fields.Char( + string="Unidade federada beneficiária do recolhimento", sped_length="2*" + ) + + NUM_DA = fields.Char(string="Número do documento de arrecadação") + + COD_AUT = fields.Char(string="Código completo da autenticação bancária") + + VL_DA = fields.Monetary( + string="Valor do total do documento de arrecadação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do total do documento de arrecadação (principal, atualização " + "monetária, juros e multa)" + ), + ) + + DT_VCTO = fields.Date( + string="Data de vencimento do documento de arrecadação", sped_length="8*" + ) + + DT_PGTO = fields.Date( + string="Data de pagamento do documento de arrecadação", + sped_length="8*", + help=( + "Data de pagamento do documento de arrecadação, ou data do vencimento, no " + "caso de ICMS antecipado a recolher" + ), + ) + + reg_C112_ids_RegistroC110_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c110", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=( + "Complemento de Documento - Informação Complementar da Nota Fiscal (código " + "01, 1B, 55)" + ), + ) + + +class RegistroC113(models.AbstractModel): + "Complemento de Documento - Documento Fiscal Referenciado" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c113" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + IND_OPER = fields.Char( + string="Indicador do tipo de operação", + sped_length="1*", + help=("Indicador do tipo de operação: 0- Entrada/aquisição 1- Saída/prestação"), + ) + + IND_EMIT = fields.Char( + string="Indicador do emitente do título", + sped_length="1*", + help="Indicador do emitente do título: 0- Emissão própria 1- Terceiros", + ) + + COD_PART = fields.Char( + string="Código do participante emitente", + sped_length="6", + help=( + "Código do participante emitente (campo 02 do Registro 0150) do documento " + "referenciado" + ), + ) + + COD_MOD = fields.Char( + string="Código do documento fiscal", + sped_length="2*", + help="Código do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + CHV_DOCE = fields.Char( + string="Chave do Documento Eletrônico", + xsd_type="numeric_code", + sped_length="44*", + ) + + reg_C113_ids_RegistroC110_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c110", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=( + "Complemento de Documento - Informação Complementar da Nota Fiscal (código " + "01, 1B, 55)" + ), + ) + + +class RegistroC114(models.AbstractModel): + "Complemento de Documento - Cupom Fiscal Referenciado" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c114" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help=( + "Código do modelo do documento fiscal, conforme a tabela indicada no item " + "4.1.1" + ), + ) + + ECF_FAB = fields.Char( + string="Número de série de fabricação do ECF", sped_length="21" + ) + + ECF_CX = fields.Char( + string="Número do caixa atribuído ao ECF", + xsd_type="numeric_code", + sped_length="3", + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + reg_C114_ids_RegistroC110_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c110", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=( + "Complemento de Documento - Informação Complementar da Nota Fiscal (código " + "01, 1B, 55)" + ), + ) + + +class RegistroC115(models.AbstractModel): + "Local de coleta e/ou entrega (CÓDIGOS 01, 1B e 04)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c115" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + IND_CARGA = fields.Char( + string="Indicador do tipo de transporte", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Indicador do tipo de transporte: 0 - Rodoviário 1 - Ferroviário 2 - Rodo-" + "Ferroviário 3 - Aquaviário 4 - Dutoviário 5 - Aéreo 9 – Outros" + ), + ) + + CNPJ_COL = fields.Char( + string="Número do CNPJ do contribuinte do local de coleta", + xsd_type="numeric_code", + sped_length="14*", + ) + + IE_COL = fields.Char( + string="Inscrição estadual do contribuinte do local", + sped_length="14", + help="Inscrição estadual do contribuinte do local de coleta", + ) + + CPF_COL = fields.Char( + string="CPF do contribuinte do local de coleta", + xsd_type="numeric_code", + sped_length="11*", + help="CPF do contribuinte do local de coleta das mercadorias", + ) + + COD_MUN_COL = fields.Char( + string="Código do Município do local de coleta", + xsd_type="numeric_code", + sped_length="7*", + ) + + CNPJ_ENTG = fields.Char( + string="Número do CNPJ do contribuinte do local de entrega", + xsd_type="numeric_code", + sped_length="14*", + ) + + IE_ENTG = fields.Char( + string="IE_ENTG", + sped_length="14", + help="Inscrição estadual do contribuinte do local de entrega", + ) + + CPF_ENTG = fields.Char( + string="CPF do contribuinte do local de entrega", + xsd_type="numeric_code", + sped_length="11*", + ) + + COD_MUN_ENTG = fields.Char( + string="Código do município do local de entrega", + xsd_type="numeric_code", + sped_length="7*", + ) + + reg_C115_ids_RegistroC110_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c110", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=( + "Complemento de Documento - Informação Complementar da Nota Fiscal (código " + "01, 1B, 55)" + ), + ) + + +class RegistroC116(models.AbstractModel): + "Cupom Fiscal Eletrônico - CF-e referenciado" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c116" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + NR_SAT = fields.Char( + string="Número de Série do equipamento SAT", + xsd_type="numeric_code", + sped_length="9", + ) + + CHV_CFE = fields.Char( + string="Chave do Cupom Fiscal Eletrônico", + xsd_type="numeric_code", + sped_length="44", + ) + + NUM_CFE = fields.Char( + string="Número do Cupom Fiscal Eletrônico", + xsd_type="numeric_code", + sped_length="6", + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8") + + reg_C116_ids_RegistroC110_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c110", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=( + "Complemento de Documento - Informação Complementar da Nota Fiscal (código " + "01, 1B, 55)" + ), + ) + + +class RegistroC120(models.AbstractModel): + """Complemento de Documento - Operações de Importação (códigos 01 e 55)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c120" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_DOC_IMP = fields.Char( + string="Documento de importação", + sped_length="1*", + help=( + "Documento de importação: 0 - Declaração de importação; 1 - Declaração " + "simplificada de importação. 2 – Declaração Única de Importação (DUIMP)" + ), + ) + + NUM_DOC_IMP = fields.Char( + string="Número do documento de importação", sped_length="15" + ) + + PIS_IMP = fields.Float( + string="Valor pago de PIS na importação", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + COFINS_IMP = fields.Float( + string="Valor pago de COFINS na importação", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + NUM_ACDRAW = fields.Char( + string="Número do ato concessório do regime Drawback", sped_length="2" + ) + + reg_C120_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + +class RegistroC130(models.AbstractModel): + "Complemento de Documento - ISSQN, IRRF e Previdência" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c130" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + VL_SERV_NT = fields.Monetary( + string="Valor dos serviços sob não-incidência", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor dos serviços sob não-incidência ou não-tributados pelo ICMS", + ) + + VL_BC_ISSQN = fields.Monetary( + string="Valor da base de cálculo do ISSQN", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ISSQN = fields.Monetary( + string="Valor do ISSQN", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_BC_IRRF = fields.Monetary( + string="Valor da base de cálculo do Imposto", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da base de cálculo do Imposto de Renda Retido na Fonte", + ) + + VL_IRRF = fields.Monetary( + string="Valor do Imposto de Renda retido na fonte", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_PREV = fields.Monetary( + string="Valor da base de cálculo de retenção", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da base de cálculo de retenção da Previdência Social", + ) + + VL_PREV = fields.Monetary( + string="Valor destacado para retenção", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor destacado para retenção da Previdência Social", + ) + + reg_C130_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + +class RegistroC140(models.AbstractModel): + "Complemento de Documento - Fatura (código 01)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c140" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + IND_EMIT = fields.Char( + string="Indicador do emitente do título", + sped_length="1*", + help="Indicador do emitente do título: 0 - Emissão própria 1 - Terceiros", + ) + + IND_TIT = fields.Char( + string="Indicador do tipo de título de crédito", + sped_length="2*", + help=( + "Indicador do tipo de título de crédito: 00 - Duplicata 01 - Cheque 02 - " + "Promissória 03 - Recibo 99 - Outros (descrever)" + ), + ) + + DESC_TIT = fields.Char(string="Descrição complementar do título de crédito") + + NUM_TIT = fields.Char( + string="Número ou código identificador do título", + help="Número ou código identificador do título de crédito", + ) + + QTD_PARC = fields.Char( + string="Quantidade de parcelas a receber/pagar", + xsd_type="numeric_code", + sped_length="2", + ) + + VL_TIT = fields.Monetary( + string="Valor total dos títulos de créditos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_C140_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + reg_C141_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c141", + "reg_C141_ids_RegistroC140_id", + string="C141 Complemento de Documento", + sped_card="1:N", + help="C141 Complemento de Documento - Vencimento da Fatura (código 01)", + ) + + +class RegistroC141(models.AbstractModel): + "Complemento de Documento - Vencimento da Fatura (código 01)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c141" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + NUM_PARC = fields.Char( + string="Número da parcela a receber/pagar", + xsd_type="numeric_code", + sped_length="2", + ) + + DT_VCTO = fields.Date(string="Data de vencimento da parcela", sped_length="8*") + + VL_PARC = fields.Monetary( + string="Valor da parcela a receber/pagar", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_C141_ids_RegistroC140_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c140", + string="Complemento de Documento - Fatura", + required=True, + ondelete="cascade", + help="Complemento de Documento - Fatura (código 01)", + ) + + +class RegistroC160(models.AbstractModel): + """Complemento de Documento - Volumes Transportados (código 01 e 04) Exceto + Combustíveis""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c160" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - transportador, se " + "houver" + ), + ) + + VEIC_ID = fields.Char( + string="Placa de identificação do veículo automotor", sped_length="7" + ) + + QTD_VOL = fields.Integer(string="Quantidade de volumes transportados") + + PESO_BRT = fields.Float( + string="Peso bruto dos volumes transportados", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Peso bruto dos volumes transportados (em kg)", + ) + + PESO_LIQ = fields.Float( + string="Peso líquido dos volumes transportados", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Peso líquido dos volumes transportados (em kg)", + ) + + UF_ID = fields.Char(string="Sigla da UF da placa do veículo", sped_length="2") + + reg_C160_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + +class RegistroC165(models.AbstractModel): + "Complemento de Documento - Operações com combustíveis (código 01)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c165" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - transportador, se " + "houver" + ), + ) + + VEIC_ID = fields.Char(string="Placa de identificação do veículo", sped_length="7") + + COD_AUT = fields.Char( + string="Código da autorização fornecido pela SEFAZ", + help="Código da autorização fornecido pela SEFAZ (combustíveis)", + ) + + NR_PASSE = fields.Char(string="Número do Passe Fiscal") + + HORA = fields.Char( + string="Hora da saída das mercadorias", + xsd_type="numeric_code", + sped_length="6*", + ) + + TEMPER = fields.Float( + string="Temperatura em graus Celsius utilizada", + xsd_type="TDec_1601", + digits=( + 16, + 1, + ), + help=( + "Temperatura em graus Celsius utilizada para quantificação do volume de " + "combustível" + ), + ) + + QTD_VOL = fields.Integer(string="Quantidade de volumes transportados") + + PESO_BRT = fields.Float( + string="Peso bruto dos volumes transportados", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Peso bruto dos volumes transportados (em kg)", + ) + + PESO_LIQ = fields.Float( + string="Peso líquido dos volumes transportados", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Peso líquido dos volumes transportados (em kg)", + ) + + NOM_MOT = fields.Char(string="Nome do motorista", sped_length="6") + + CPF = fields.Char( + string="CPF do motorista", xsd_type="numeric_code", sped_length="11*" + ) + + UF_ID = fields.Char(string="Sigla da UF da placa do veículo", sped_length="2") + + reg_C165_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + +class RegistroC170(models.AbstractModel): + """Complemento de Documento - Itens do Documento (código 01, 1B, 04 e + 55)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c170" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_ITEM = fields.Char( + string="Número sequencial do item no documento fiscal", + xsd_type="numeric_code", + sped_length="3", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + DESCR_COMPL = fields.Char( + string="Descrição complementar do item como adotado", + help="Descrição complementar do item como adotado no documento fiscal", + ) + + QTD = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1605", + digits=( + 16, + 5, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor total do item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total do item (mercadorias ou serviços)", + ) + + VL_DESC = fields.Monetary( + string="Valor do desconto comercial", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + IND_MOV = fields.Char( + string="Movimentação física do item/Produto", sped_length="1*" + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária referente ao ICMS", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária referente ao ICMS, conforme a tabela " + "indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + COD_NAT = fields.Char( + string="Código da natureza da operação", + sped_length="1", + help="Código da natureza da operação (campo 02 do Registro 0400)", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS creditado/debitado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Valor da base de cálculo referente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da base de cálculo referente à substituição tributária", + ) + + ALIQ_ST = fields.Float( + string="Alíquota do ICMS da substituição tributária", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Alíquota do ICMS da substituição tributária na unidade da federação de " + "destino" + ), + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor do ICMS referente à substituição tributária", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + IND_APUR = fields.Char( + string="Indicador de período de apuração do IPI", + sped_length="1*", + help="Indicador de período de apuração do IPI: 0 - Mensal 1 - Decendial", + ) + + CST_IPI = fields.Char( + string="Código da Situação Tributária referente ao IPI", + sped_length="2*", + help=( + "Código da Situação Tributária referente ao IPI, conforme a tabela indicada" + " no item 4.3.2" + ), + ) + + COD_ENQ = fields.Char( + string="Código de enquadramento legal do IPI", + sped_length="3*", + help=( + "Código de enquadramento legal do IPI, conforme tabela indicada no item " + "4.5.3" + ), + ) + + VL_BC_IPI = fields.Monetary( + string="Valor da base de cálculo do IPI", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_IPI = fields.Float( + string="Alíquota do IPI", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_IPI = fields.Monetary( + string="Valor do IPI creditado/debitado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CST_PIS = fields.Char( + string="Código da Situação Tributária referente ao PIS", + xsd_type="numeric_code", + sped_length="2*", + ) + + VL_BC_PIS = fields.Monetary( + string="Valor da base de cálculo do PIS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_PIS = fields.Float( + string="Alíquota do PIS (em percentual)", + sped_length="8", + xsd_type="TDec_1604", + digits=( + 16, + 4, + ), + ) + + QUANT_BC_PIS = fields.Float( + string="Quantidade - Base de cálculo PIS", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + ALIQ_PIS_INDEX_29 = fields.Float( + string="Alíquota do PIS (em reais)", + xsd_type="TDec_1604", + digits=( + 16, + 4, + ), + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + CST_COFINS = fields.Char( + string="Código da Situação Tributária referente à COFINS", + xsd_type="numeric_code", + sped_length="2*", + ) + + VL_BC_COFINS = fields.Monetary( + string="Valor da base de cálculo da COFINS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_COFINS = fields.Float( + string="Alíquota do COFINS (em percentual)", + sped_length="8", + xsd_type="TDec_1604", + digits=( + 16, + 4, + ), + ) + + QUANT_BC_COFINS = fields.Float( + string="Quantidade - Base de cálculo COFINS", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + ALIQ_COFINS_INDEX_35 = fields.Float( + string="Alíquota da COFINS (em reais)", + xsd_type="TDec_1604", + digits=( + 16, + 4, + ), + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + VL_ABAT_NT = fields.Monetary( + string="Valor do abatimento não tributado e não comercial", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_C170_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + reg_C172_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c172", + "reg_C172_ids_RegistroC170_id", + string="C172 Complemento de Item", + sped_card="1:1", + help="C172 Complemento de Item - Operações com ISSQN (código 01)", + ) + + reg_C177_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c177", + "reg_C177_ids_RegistroC170_id", + string="C177 Complemento de Item – Outras informações", + sped_card="1:1", + help=( + "C177 Complemento de Item – Outras informações (Cód. 01, 55) – (Válido a " + "partir de 01/01/2019)" + ), + ) + + reg_C178_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c178", + "reg_C178_ids_RegistroC170_id", + string="C178 Complemento de Item", + sped_card="1:1", + help=( + "C178 Complemento de Item - Operações com Produtos Sujeitos a Tributação de" + " IPI por Unidade ou Quantidade de produto" + ), + ) + + reg_C179_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c179", + "reg_C179_ids_RegistroC170_id", + string="C179 Complemento de Item", + sped_card="1:1", + help="C179 Complemento de Item - Informações Complementares ST (código 01)", + ) + + reg_C180_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c180", + "reg_C180_ids_RegistroC170_id", + string="C180 Informações complementares das operações", + sped_card="1:1", + help=( + "C180 Informações complementares das operações de entrada de mercadorias " + "sujeitas à substituição tributária (código 01, 1B, 04 e 55)" + ), + ) + + reg_C171_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c171", + "reg_C171_ids_RegistroC170_id", + string="C171 Complemento de Item", + sped_card="1:N", + help=( + "C171 Complemento de Item - Armazenamento de Combustíveis (código 01,55)" + ), + ) + + reg_C173_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c173", + "reg_C173_ids_RegistroC170_id", + string="C173 Complemento de Item", + sped_card="1:N", + help="C173 Complemento de Item - Operações com Medicamentos (código 01, 55)", + ) + + reg_C174_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c174", + "reg_C174_ids_RegistroC170_id", + string="C174 Complemento de Item", + sped_card="1:N", + help="C174 Complemento de Item - Operações com Armas de Fogo (código 01)", + ) + + reg_C175_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c175", + "reg_C175_ids_RegistroC170_id", + string="C175 Complemento de Item", + sped_card="1:N", + help=( + "C175 Complemento de Item - Operações com Veículos Novos (código 01, 55)" + ), + ) + + reg_C176_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c176", + "reg_C176_ids_RegistroC170_id", + string="C176 Complemento de Item", + sped_card="1:N", + help=( + "C176 Complemento de Item - Ressarcimento de ICMS e Fundo de Combate à " + "Pobreza - (FCP) em operações com Substituição Tributária (código 01, 55)" + ), + ) + + reg_C181_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c181", + "reg_C181_ids_RegistroC170_id", + string="C181 Informações complementares das operações", + sped_card="1:N", + help=( + "C181 Informações complementares das operações de devolução de saídas de " + "mercadorias sujeitas à substituição tributária (código 01, 1B, 04 e 55)." + ), + ) + + +class RegistroC171(models.AbstractModel): + "Complemento de Item - Armazenamento de Combustíveis (código 01,55)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c171" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + NUM_TANQUE = fields.Char( + string="Tanque onde foi armazenado o combustível", sped_length="3" + ) + + QTDE = fields.Float( + string="Quantidade ou volume armazenado", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + reg_C171_ids_RegistroC170_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c170", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=("Complemento de Documento - Itens do Documento (código 01, 1B, 04 e 55)"), + ) + + +class RegistroC172(models.AbstractModel): + "Complemento de Item - Operações com ISSQN (código 01)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c172" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + VL_BC_ISSQN = fields.Monetary( + string="Valor da base de cálculo do ISSQN", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ISSQN = fields.Float( + string="Alíquota do ISSQN", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ISSQN = fields.Monetary( + string="Valor do ISSQN", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + reg_C172_ids_RegistroC170_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c170", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=("Complemento de Documento - Itens do Documento (código 01, 1B, 04 e 55)"), + ) + + +class RegistroC173(models.AbstractModel): + "Complemento de Item - Operações com Medicamentos (código 01, 55)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c173" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + LOTE_MED = fields.Char(string="Número do lote de fabricação do medicamento") + + QTD_ITEM = fields.Float( + string="Quantidade de item por lote", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + DT_FAB = fields.Date(string="Data de fabricação do medicamento", sped_length="8*") + + DT_VAL = fields.Date( + string="Data de expiração da validade do medicamento", sped_length="8*" + ) + + IND_MED = fields.Char( + string="Indicador de tipo de referência da base de cálculo", + sped_length="1*", + help=( + "Indicador de tipo de referência da base de cálculo do ICMS (ST) do produto" + " farmacêutico: 0- Base de cálculo referente ao preço tabela do ou preço " + "máximo sugerido 1- Base cálculo - Margem de valor agregado 2- Base de " + "cálculo referente à Lista Negativa 3- Base de cálculo referente à Lista " + "Positiva 4- Base de cálculo referente à Lista Neutra" + ), + ) + + TP_PROD = fields.Char( + string="Tipo de produto", + sped_length="1*", + help="Tipo de produto: 0- Similar 1- Genérico 2- Ético ou de marca", + ) + + VL_TAB_MAX = fields.Monetary( + string="Valor do preço tabela do ou valor do preço máximo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_C173_ids_RegistroC170_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c170", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=("Complemento de Documento - Itens do Documento (código 01, 1B, 04 e 55)"), + ) + + +class RegistroC174(models.AbstractModel): + "Complemento de Item - Operações com Armas de Fogo (código 01)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c174" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + IND_ARM = fields.Char( + string="Indicador do tipo da arma de fogo", + sped_length="1*", + help="Indicador do tipo da arma de fogo: 0- Uso permitido 1- Uso restrito", + ) + + NUM_ARM = fields.Char(string="Numeração de série de fabricação da arma") + + DESCR_COMPL = fields.Char( + string="Descrição da arma", + help=( + "Descrição da arma, compreendendo: número do cano, calibre, marca, " + "capacidade de cartuchos, tipo de funcionamento, quantidade de canos, " + "comprimento, tipo de alma, quantidade e sentido das raias e demais " + "elementos que permitam sua perfeita identificação" + ), + ) + + reg_C174_ids_RegistroC170_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c170", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=("Complemento de Documento - Itens do Documento (código 01, 1B, 04 e 55)"), + ) + + +class RegistroC175(models.AbstractModel): + "Complemento de Item - Operações com Veículos Novos (código 01, 55)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c175" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + IND_VEIC_OPER = fields.Char( + string="Indicador do tipo de operação com veículo", + sped_length="1*", + help=( + "Indicador do tipo de operação com veículo: 0- Venda para concessionária; " + "1- Faturamento direto; 2- Venda direta; 3- Venda da concessionária; 9- " + "Outros" + ), + ) + + CNPJ = fields.Char( + string="CNPJ da concessionária", xsd_type="numeric_code", sped_length="14*" + ) + + UF = fields.Char( + string="Sigla da unidade da federação da concessionária", sped_length="2*" + ) + + CHASSI_VEIC = fields.Char(string="Chassi do veículo", sped_length="17") + + reg_C175_ids_RegistroC170_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c170", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=("Complemento de Documento - Itens do Documento (código 01, 1B, 04 e 55)"), + ) + + +class RegistroC176(models.AbstractModel): + """Complemento de Item - Ressarcimento de ICMS e Fundo de Combate à Pobreza + - (FCP) em operações com Substituição Tributária (código 01, 55)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c176" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_MOD_ULT_E = fields.Char( + string="Código do modelo do documento fiscal relativa", + sped_length="2*", + help="Código do modelo do documento fiscal relativa à última entrada", + ) + + NUM_DOC_ULT_E = fields.Char( + string="Número do documento fiscal relativa", + xsd_type="numeric_code", + sped_length="9", + help="Número do documento fiscal relativa à última entrada", + ) + + SER_ULT_E = fields.Char( + string="Série do documento fiscal relativa", + sped_length="3", + help="Série do documento fiscal relativa à última entrada", + ) + + DT_ULT_E = fields.Date( + string="Data relativa a última entrada da mercadoria", sped_length="8*" + ) + + COD_PART_ULT_E = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (do emitente do documento relativa à última " + "entrada)" + ), + ) + + QUANT_ULT_E = fields.Float( + string="Quantidade do item relativa à última entrada", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + VL_UNIT_ULT_E = fields.Float( + string="Valor unitário da mercadoria constante", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor unitário da mercadoria constante na NF relativa à última entrada " + "inclusive despesas acessórias" + ), + ) + + VL_UNIT_BC_ST = fields.Float( + string="Valor unitário da base de cálculo do imposto pago", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help="Valor unitário da base de cálculo do imposto pago por substituição.", + ) + + CHAVE_NFE_ULT_E = fields.Char( + string="Número completo da chave da NFe relativo", + xsd_type="numeric_code", + sped_length="44*", + help="Número completo da chave da NFe relativo à última entrada", + ) + + NUM_ITEM_ULT_E = fields.Char( + string="Número sequencial do item na NF entrada", + xsd_type="numeric_code", + sped_length="3", + help=( + "Número sequencial do item na NF entrada que corresponde à mercadoria " + "objeto de pedido de ressarcimento" + ), + ) + + VL_UNIT_BC_ICMS_ULT_E = fields.Monetary( + string="Valor unitário da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor unitário da base de cálculo da operação própria do remetente sob o " + "regime comum de tributação" + ), + ) + + ALIQ_ICMS_ULT_E = fields.Float( + string="Alíquota do ICMS aplicável à última entrada", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Alíquota do ICMS aplicável à última entrada da mercadoria", + ) + + VL_UNIT_LIMITE_BC_ICMS_ULT_E = fields.Monetary( + string="Valor unitário da base de cálculo do ICMS relativo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor unitário da base de cálculo do ICMS relativo à última entrada da " + "mercadoria, limitado ao valor da BC da retenção (corresponde ao menor " + "valor entre os campos VL_UNIT_BC_ST e VL_UNIT_BC_ICMS_ULT_E )" + ), + ) + + VL_UNIT_ICMS_ULT_E = fields.Float( + string="Valor unitário do crédito", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor unitário do crédito de ICMS sobre operações próprias do remetente, " + "relativo à última entrada da mercadoria, decorrente da quebra da ST – " + "equivalente a multiplicação entre os campos 13 e 14" + ), + ) + + ALIQ_ST_ULT_E = fields.Float( + string="Alíquota do ICMS ST relativa à última entrada", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Alíquota do ICMS ST relativa à última entrada da mercadoria", + ) + + VL_UNIT_RES = fields.Float( + string="Valor unitário do ressarcimento", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor unitário do ressarcimento (parcial ou completo) de ICMS decorrente " + "da quebra da ST" + ), + ) + + COD_RESP_RET = fields.Char( + string="Código que indica o responsável pela retenção", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Código que indica o responsável pela retenção do ICMS-ST: 1 - Remetente " + "Direto Regime Comum 2 - Remetente Indireto 3 - Próprio Declarante 4 – " + "Remetente Direto Simples Nacional" + ), + ) + + COD_MOT_RES = fields.Char( + string="Código do motivo do ressarcimento", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Código do motivo do ressarcimento: 1 - Saída para outra UF 2 - Saída " + "amparada por isenção ou não incidência 3 - Perda ou deterioração" + ), + ) + + CHAVE_NFE_RET = fields.Char( + string="Número completo da chave da NF-e emitida", + xsd_type="numeric_code", + sped_length="44*", + help=( + "Número completo da chave da NF-e emitida pelo substituto, na qual consta o" + " valor do ICMS-ST retido" + ), + ) + + COD_PART_NFE_RET = fields.Char( + string="Código do participante do emitente da NF-e", + sped_length="6", + help=( + "Código do participante do emitente da NF-e em que houve a retenção do " + "ICMS-ST – campo 02 do registro 0150" + ), + ) + + SER_NFE_RET = fields.Char( + string="Série da NF-e em que houve a retenção do ICMS-ST", sped_length="3" + ) + + NUM_NFE_RET = fields.Char( + string="Número da NF-e em que houve a retenção do ICMS-ST", + xsd_type="numeric_code", + sped_length="9", + ) + + ITEM_NFE_RET = fields.Char( + string="Número sequencial do item na NF-e", + xsd_type="numeric_code", + sped_length="3", + help=( + "Número sequencial do item na NF-e em que houve a retenção do ICMS-ST, que " + "corresponde à mercadoria objeto de pedido de ressarcimento" + ), + ) + + COD_DA = fields.Char( + string="Código do modelo do documento de arrecadação", + sped_length="1*", + help=( + "Código do modelo do documento de arrecadação: 0 - documento estadual de " + "arrecadação 1 - GNRE" + ), + ) + + NUM_DA = fields.Char( + string="Número do documento de arrecadação estadual", + help="Número do documento de arrecadação estadual, se houver", + ) + + VL_UNIT_RES_FCP_ST = fields.Float( + string="VL_UNIT_RES_FCP_ST", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor unitário do ressarcimento (parcial ou completo) de FCP decorrente da" + " quebra da ST" + ), + ) + + reg_C176_ids_RegistroC170_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c170", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=("Complemento de Documento - Itens do Documento (código 01, 1B, 04 e 55)"), + ) + + +class RegistroC177(models.AbstractModel): + """Complemento de Item – Outras informações (Cód. 01, 55) – (Válido a + partir de 01/01/2019)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c177" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_INF_ITEM = fields.Char( + string="Código da informação adicional de acordo", + sped_length="8*", + help=( + "Código da informação adicional de acordo com tabela a ser publicada pelas " + "SEFAZ, conforme tabela definida no item 5.6" + ), + ) + + reg_C177_ids_RegistroC170_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c170", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=("Complemento de Documento - Itens do Documento (código 01, 1B, 04 e 55)"), + ) + + +class RegistroC178(models.AbstractModel): + """Complemento de Item - Operações com Produtos Sujeitos a Tributação de + IPI por Unidade ou Quantidade de produto""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c178" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + CL_ENQ = fields.Char( + string="Código da classe de enquadramento do IPI", + sped_length="5", + help="Código da classe de enquadramento do IPI, conforme tabela 4.5.1", + ) + + VL_UNID = fields.Monetary( + string="Valor por unidade padrão de tributação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + QUANT_PAD = fields.Float( + string="Quantidade total de produtos na unidade padrão", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help="Quantidade total de produtos na unidade padrão de tributação", + ) + + reg_C178_ids_RegistroC170_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c170", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=("Complemento de Documento - Itens do Documento (código 01, 1B, 04 e 55)"), + ) + + +class RegistroC179(models.AbstractModel): + "Complemento de Item - Informações Complementares ST (código 01)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c179" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + BC_ST_ORIG_DEST = fields.Float( + string="Valor da base de cálculo ST na origem/destino", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Valor da base de cálculo ST na origem/destino em operações interestaduais" + ), + ) + + ICMS_ST_REP = fields.Float( + string="Valor do ICMS-ST a repassar/deduzir", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Valor do ICMS-ST a repassar/deduzir em operações interestaduais", + ) + + ICMS_ST_COMPL = fields.Float( + string="Valor do ICMS-ST a complementar à UF de destino", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + BC_RET = fields.Float( + string="Valor da BC de retenção em remessa promovida", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Valor da BC de retenção em remessa promovida por Substituído intermediário" + ), + ) + + ICMS_RET = fields.Float( + string="Valor da parcela do imposto retido", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Valor da parcela do imposto retido em remessa promovida por substituído " + "intermediário" + ), + ) + + reg_C179_ids_RegistroC170_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c170", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=("Complemento de Documento - Itens do Documento (código 01, 1B, 04 e 55)"), + ) + + +class RegistroC180(models.AbstractModel): + """Informações complementares das operações de entrada de mercadorias + sujeitas à substituição tributária (código 01, 1B, 04 e 55)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c180" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_RESP_RET = fields.Char( + string="Código que indica o responsável pela retenção", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Código que indica o responsável pela retenção do ICMS-ST: 1-Remetente " + "Direto 2-Remetente Indireto 3-Próprio declarante" + ), + ) + + QUANT_CONV = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + UNID = fields.Char( + string="Unidade adotada para informar o campo QUANT_CONV", sped_length="6" + ) + + VL_UNIT_CONV = fields.Float( + string="Valor unitário da mercadoria", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário da mercadoria, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_OP_CONV = fields.Float( + string="Valor unitário do ICMS operação própria", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do ICMS operação própria que o informante teria direito ao " + "crédito caso a mercadoria estivesse sob o regime comum de tributação, " + "considerando unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_BC_ICMS_ST_CONV = fields.Float( + string="Valor unitário da base de cálculo do imposto pago", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário da base de cálculo do imposto pago ou retido anteriormente " + "por substituição, considerando a unidade utilizada para informar o campo " + "“QUANT_CONV”, aplicando-se redução, se houver." + ), + ) + + VL_UNIT_ICMS_ST_CONV = fields.Float( + string="Valor unitário do imposto pago", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do imposto pago ou retido anteriormente por substituição, " + "inclusive FCP se devido, considerando a unidade utilizada para informar o " + "campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV = fields.Float( + string="Valor unitário do FCP_ST agregado", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do FCP_ST agregado ao valor informado no campo " + "“VL_UNIT_ICMS_ST_CONV”" + ), + ) + + COD_DA = fields.Char( + string="Código do modelo do documento de arrecadação", + sped_length="1*", + help=( + "Código do modelo do documento de arrecadação: 0 – Documento estadual de " + "arrecadação 1 – GNRE" + ), + ) + + NUM_DA = fields.Char( + string="Número do documento de arrecadação", + help="Número do documento de arrecadação, se houver", + ) + + reg_C180_ids_RegistroC170_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c170", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=("Complemento de Documento - Itens do Documento (código 01, 1B, 04 e 55)"), + ) + + +class RegistroC181(models.AbstractModel): + """Informações complementares das operações de devolução de saídas de + mercadorias sujeitas à substituição tributária (código 01, 1B, 04 e + 55).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c181" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_MOT_REST_COMPL = fields.Char( + string="Código do motivo da restituição", + sped_length="5*", + help="Código do motivo da restituição ou complementação conforme Tabela 5.7", + ) + + QUANT_CONV = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + UNID = fields.Char( + string="Unidade adotada para informar o campo QUANT_CONV", sped_length="6" + ) + + COD_MOD_SAIDA = fields.Char( + string="Código do modelo do documento fiscal de saída", + sped_length="2*", + help=( + "Código do modelo do documento fiscal de saída, conforme a tabela indicada " + "no item 4.1.1" + ), + ) + + SERIE_SAIDA = fields.Char( + string="Número de série do documento de saída em papel", sped_length="3" + ) + + ECF_FAB_SAIDA = fields.Char( + string="Número de série de fabricação do equipamento ECF", sped_length="21" + ) + + NUM_DOC_SAIDA = fields.Char( + string="Número do documento fiscal de saída", + xsd_type="numeric_code", + sped_length="9", + ) + + CHV_DFE_SAIDA = fields.Char( + string="Chave do documento fiscal eletrônico de saída", + xsd_type="numeric_code", + sped_length="44*", + ) + + DT_DOC_SAIDA = fields.Date( + string="Data da emissão do documento fiscal de saída", sped_length="8*" + ) + + NUM_ITEM_SAIDA = fields.Char( + string="Número do item em que foi escriturada a saída", + xsd_type="numeric_code", + sped_length="3", + help=( + "Número do item em que foi escriturada a saída em um registro C185, C380, " + "C480 ou C815 quando o contribuinte informar a saída em um arquivo de " + "perfil A." + ), + ) + + VL_UNIT_CONV_SAIDA = fields.Float( + string="Valor unitário da mercadoria", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário da mercadoria, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”, correspondente ao valor do campo " + "VL_UNIT_CONV, preenchido na ocasião da saída" + ), + ) + + reg_C181_ids_RegistroC170_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c170", + string="Complemento de Documento", + required=True, + ondelete="cascade", + help=("Complemento de Documento - Itens do Documento (código 01, 1B, 04 e 55)"), + ) + + +class RegistroC185(models.AbstractModel): + """Informações complementares das operações de saída de mercadorias + sujeitas à substituição tributária (código 01, 1B, 04 e 55)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c185" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_ITEM = fields.Char( + string="Número sequencial do item no documento fiscal", + xsd_type="numeric_code", + sped_length="3", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária referente ao ICMS", + xsd_type="numeric_code", + sped_length="3*", + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + COD_MOT_REST_COMPL = fields.Char( + string="Código do motivo da restituição", + sped_length="5*", + help="Código do motivo da restituição ou complementação conforme Tabela 5.7", + ) + + QUANT_CONV = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + UNID = fields.Char( + string="Unidade adotada para informar o campo QUANT_CONV", sped_length="6" + ) + + VL_UNIT_CONV = fields.Float( + string="Valor unitário da mercadoria", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário da mercadoria, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_NA_OPERACAO_CONV = fields.Float( + string="Valor unitário para o ICMS na operação", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário para o ICMS na operação, caso não houvesse a ST, " + "considerando unidade utilizada para informar o campo “QUANT_CONV”, " + "considerando redução da base de cálculo do ICMS ST na tributação, se " + "houver." + ), + ) + + VL_UNIT_ICMS_OP_CONV = fields.Float( + string="Valor unitário do ICMS OP calculado conforme", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do ICMS OP calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”, " + "utilizado para cálculo de ressarcimento/restituição de ST, no desfazimento" + " da substituição tributária, quando se utiliza a fórmula descrita nas " + "instruções de preenchimento do campo 15, no item a1)." + ), + ) + + VL_UNIT_ICMS_OP_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS que o contribuinte teria se creditado " + "referente à operação de entrada das mercadorias em estoque caso estivesse " + "submetida ao regime comum de tributação, calculado conforme a legislação " + "de cada UF, considerando a unidade utilizada para informar o campo " + "“QUANT_CONV”" + ), + ) + + VL_UNIT_ICMS_ST_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS/ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS/ST, incluindo FCP ST, das mercadorias em " + "estoque, considerando a unidade utilizada para informar o campo " + "“QUANT_CONV”" + ), + ) + + VL_UNIT_ICMS_ST_ = fields.Float( + string="Valor unitário do total do ICMS/ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help="Valor unitário do total do ICMS/ST, incluindo FCP ST, a ser", + ) + + VL_UNIT_FCP_ST_CONV_REST = fields.Float( + string="Valor unitário correspondente à parcela", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_REST”, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_COMPL = fields.Float( + string="Valor unitário do complemento do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do complemento do ICMS, incluindo FCP ST, considerando a " + "unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_COMPL = fields.Float( + string="VL_UNIT_FCP_ST_CONV_COMPL", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_COMPL”, considerando unidade utilizada para informar" + " o campo “QUANT_CONV”." + ), + ) + + reg_C185_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + +class RegistroC186(models.AbstractModel): + """Informações complementares das operações de devolução de entradas de + mercadorias sujeitas à substituição tributária (código 01, 1b, 04 e + 55).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c186" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_ITEM = fields.Char( + string="Número sequencial do item no documento fiscal", + xsd_type="numeric_code", + sped_length="3", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária referente ao ICMS", + xsd_type="numeric_code", + sped_length="3*", + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + COD_MOT_REST_COMPL = fields.Char( + string="Código do motivo da restituição", + sped_length="5*", + help="Código do motivo da restituição ou complementação conforme Tabela 5.7", + ) + + QUANT_CONV = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + UNID = fields.Char( + string="Unidade adotada para informar o campo QUANT_CONV", sped_length="6" + ) + + COD_MOD_ENTRADA = fields.Char( + string="Código do modelo do documento fiscal de saída", + sped_length="2*", + help=( + "Código do modelo do documento fiscal de saída, conforme a tabela indicada " + "no item 4.1.1" + ), + ) + + SERIE_ENTRADA = fields.Char( + string="Número de série do documento de entrada em papel", sped_length="3" + ) + + NUM_DOC_ENTRADA = fields.Char( + string="Número do documento fiscal de entrada", + xsd_type="numeric_code", + sped_length="9", + ) + + CHV_DFE_ENTRADA = fields.Char( + string="Chave do documento fiscal eletrônico de entrada", + xsd_type="numeric_code", + sped_length="44*", + ) + + DT_DOC_ENTRADA = fields.Date( + string="Data da emissão do documento fiscal de entrada", sped_length="8*" + ) + + NUM_ITEM_ENTRADA = fields.Char( + string="Item do documento fiscal de entrada", + xsd_type="numeric_code", + sped_length="3", + ) + + VL_UNIT_CONV_ENTRADA = fields.Float( + string="Valor unitário da mercadoria", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário da mercadoria, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”, correspondente ao valor do campo " + "VL_UNIT_CONV, preenchido na ocasião da entrada" + ), + ) + + VL_UNIT_ICMS_OP_CONV_ENTRADA = fields.Float( + string="Valor unitário do ICMS correspondente ao valor", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do ICMS correspondente ao valor do campo " + "VL_UNIT_ICMS_OP_CONV, preenchido na ocasião da entrada" + ), + ) + + VL_UNIT_ICMS_ST_CONV_ENTRADA = fields.Float( + string="Valor unitário do imposto pago", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do imposto pago ou retido anteriormente por substituição, " + "inclusive FCP se devido, correspondente ao valor do campo " + "VL_UNIT_ICMS_ST_CONV, preenchido na ocasião da entrada" + ), + ) + + VL_UNIT_FCP_ST_CONV_ENTRADA = fields.Float( + string="Valor unitário do FCP_ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do FCP_ST, correspondente ao valor do campo " + "VL_UNIT_FCP_ST_CONV, preenchido na ocasião da entrada" + ), + ) + + reg_C186_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + +class RegistroC190(models.AbstractModel): + "Registro Analítico do Documento (código 01, 1B, 04, 55 e 65)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c190" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + help="Código Fiscal de Operação e Prestação do agrupamento de itens", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da operação na combinação de CST_ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da operação na combinação de CST_ICMS, CFOP e alíquota do ICMS, " + "correspondente ao somatório do valor das mercadorias, despesas acessórias " + "(frete, seguros e outras despesas acessórias), ICMS_ST, FCP_ST e IPI" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ICMS' referente à " + "combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor do ICMS'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ICMS', incluindo o FCP, quando " + "aplicável, referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="VL_BC_ICMS_ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ICMS' da " + "substituição tributária referente à combinação de CST_ICMS, CFOP e " + "alíquota do ICMS" + ), + ) + + VL_ICMS_ST = fields.Monetary( + string="Parcela correspondente ao valor creditado/debitado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao valor creditado/debitado do ICMS da substituição" + " tributária, incluindo o FCP_ ST, quando aplicável, referente à combinação" + " de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_IPI = fields.Monetary( + string="Parcela correspondente ao 'Valor do IPI' referente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do IPI' referente à combinação CST_ICMS, " + "CFOP e alíquota do ICMS" + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_C190_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + reg_C191_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c191", + "reg_C191_ids_RegistroC190_id", + string="C191 Informações do Fundo de Combate", + sped_card="1:1", + help=( + "C191 Informações do Fundo de Combate à Pobreza – FCP – na NF-e (Código 55" + ), + ) + + +class RegistroC191(models.AbstractModel): + """Informações do Fundo de Combate à Pobreza – FCP – na NF-e (Código 55""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c191" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + VL_FCP_OP = fields.Monetary( + string="Valor do Fundo de Combate à Pobreza", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do Fundo de Combate à Pobreza (FCP) vinculado à operação própria, na" + " combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_FCP_ST = fields.Monetary( + string="Valor do Fundo de Combate à Pobreza (VL_FCP_ST)", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do Fundo de Combate à Pobreza (FCP) vinculado à operação de " + "substituição tributária, na combinação de CST_ICMS, CFOP e alíquota do " + "ICMS" + ), + ) + + VL_FCP_RET = fields.Monetary( + string="Valor relativo ao Fundo de Combate à Pobreza", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor relativo ao Fundo de Combate à Pobreza (FCP) retido anteriormente " + "nas operações com Substituição Tributárias, na combinação de CST_ICMS, " + "CFOP e alíquota do ICMS" + ), + ) + + reg_C191_ids_RegistroC190_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c190", + string="Registro Analítico do Documento", + required=True, + ondelete="cascade", + help="Registro Analítico do Documento (código 01, 1B, 04, 55 e 65)", + ) + + +class RegistroC195(models.AbstractModel): + """Complemento do Registro Analítico - Observações do Lançamento Fiscal + (código 01, 1B, 04, 55 e 65)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c195" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar do código de observação") + + reg_C195_ids_RegistroC100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c100", + string="Documento - Nota Fiscal (código 01)", + required=True, + ondelete="cascade", + help=( + "Documento - Nota Fiscal (código 01), Nota Fiscal Avulsa (código 1B), Nota " + "Fiscal de Produtor (código 04), Nota Fiscal Eletrônica (código 55), Nota " + "Fiscal Eletrônica ao Consumidor Final (código 65)" + ), + ) + + reg_C197_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c197", + "reg_C197_ids_RegistroC195_id", + string="C197 Outras Obrigações Tributárias", + sped_card="1:N", + help=( + "C197 Outras Obrigações Tributárias, Ajustes e Informações provenientes de " + "Documento Fiscal" + ), + ) + + +class RegistroC197(models.AbstractModel): + """Outras Obrigações Tributárias, Ajustes e Informações provenientes de + Documento Fiscal""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c197" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_AJ = fields.Char( + string="Código do ajustes/benefício/incentivo", + sped_length="1*", + help=( + "Código do ajustes/benefício/incentivo, conforme tabela indicada no item " + "5.3" + ), + ) + + DESCR_COMPL_AJ = fields.Char( + string="Descrição complementar do ajuste", + help="Descrição complementar do ajuste do documento fiscal", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_BC_ICMS = fields.Monetary( + string="Base de cálculo do ICMS ou do ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS ou do ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUTROS = fields.Monetary( + string="Outros valores", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + reg_C197_ids_RegistroC195_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c195", + string="Complemento do Registro Analítico", + required=True, + ondelete="cascade", + help=( + "Complemento do Registro Analítico - Observações do Lançamento Fiscal " + "(código 01, 1B, 04, 55 e 65)" + ), + ) + + +class RegistroC300(models.AbstractModel): + """Documento - Resumo Diário das Notas Fiscais de Venda a Consumidor + (código 02)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c300" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char(string="Subsérie do documento fiscal", sped_length="3") + + NUM_DOC_INI = fields.Char( + string="Número do documento fiscal inicial", + xsd_type="numeric_code", + sped_length="6", + ) + + NUM_DOC_FIN = fields.Char( + string="Número do documento fiscal final", + xsd_type="numeric_code", + sped_length="6", + ) + + DT_DOC = fields.Date( + string="Data da emissão dos documentos fiscais", sped_length="8*" + ) + + VL_DOC = fields.Monetary( + string="Valor total dos documentos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS = fields.Monetary( + string="Valor total do PIS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_COFINS = fields.Monetary( + string="Valor total da COFINS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + reg_C310_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c310", + "reg_C310_ids_RegistroC300_id", + string="C310 Documentos Cancelados de Nota Fiscal de Venda", + sped_card="1:N", + help=( + "C310 Documentos Cancelados de Nota Fiscal de Venda a Consumidor (código " + "02)" + ), + ) + + reg_C320_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c320", + "reg_C320_ids_RegistroC300_id", + string="C320 Registro Analítico das Notas Fiscais de Venda", + sped_card="1:N", + help=( + "C320 Registro Analítico das Notas Fiscais de Venda a Consumidor (código" + ), + ) + + +class RegistroC310(models.AbstractModel): + """Documentos Cancelados de Nota Fiscal de Venda a Consumidor (código + 02)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c310" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_DOC_CANC = fields.Integer(string="Número do documento fiscal cancelado") + + reg_C310_ids_RegistroC300_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c300", + string="Documento", + required=True, + ondelete="cascade", + help=( + "Documento - Resumo Diário das Notas Fiscais de Venda a Consumidor (código " + "02)" + ), + ) + + +class RegistroC320(models.AbstractModel): + "Registro Analítico das Notas Fiscais de Venda a Consumidor (código" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c320" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor total acumulado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total acumulado das operações correspondentes à combinação de " + "CST_ICMS, CFOP e alíquota do ICMS, incluídas as despesas acessórias e " + "acréscimos" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor acumulado da base de cálculo do ICMS, referente à combinação de " + "CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor acumulado do ICMS, referente à combinação de CST_ICMS, CFOP e " + "alíquota do ICMS" + ), + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_C320_ids_RegistroC300_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c300", + string="Documento", + required=True, + ondelete="cascade", + help=( + "Documento - Resumo Diário das Notas Fiscais de Venda a Consumidor (código " + "02)" + ), + ) + + reg_C321_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c321", + "reg_C321_ids_RegistroC320_id", + string="C321 Itens dos Resumos Diários dos Documentos", + sped_card="1:N", + help="C321 Itens dos Resumos Diários dos Documentos (código 02)", + ) + + +class RegistroC321(models.AbstractModel): + "Itens dos Resumos Diários dos Documentos (código 02)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c321" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade acumulada do item", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor acumulado do item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor do desconto acumulado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS debitado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS = fields.Monetary( + string="Valor acumulado do PIS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_COFINS = fields.Monetary( + string="Valor acumulado da COFINS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_C321_ids_RegistroC320_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c320", + string="Registro Analítico das Notas Fiscais de Venda", + required=True, + ondelete="cascade", + help="Registro Analítico das Notas Fiscais de Venda a Consumidor (código", + ) + + reg_C330_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c330", + "reg_C330_ids_RegistroC321_id", + string="C330 Informações complementares das operações", + sped_card="1:1", + help=( + "C330 Informações complementares das operações de saída de mercadorias " + "sujeitas à substituição tributária (código 02)" + ), + ) + + +class RegistroC330(models.AbstractModel): + """Informações complementares das operações de saída de mercadorias + sujeitas à substituição tributária (código 02)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c330" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + COD_MOT_REST_COMPL = fields.Char( + string="Código do motivo da restituição", + sped_length="5*", + help="Código do motivo da restituição ou complementação conforme Tabela 5.7", + ) + + QUANT_CONV = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + UNID = fields.Char( + string="Unidade adotada para informar o campo QUANT_CONV", sped_length="6" + ) + + VL_UNIT_CONV = fields.Float( + string="Valor unitário da mercadoria", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário da mercadoria, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_NA_OPERACAO_CONV = fields.Float( + string="Valor unitário para o ICMS na operação", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário para o ICMS na operação, caso não houvesse a ST, " + "considerando unidade utilizada para informar o campo “QUANT_CONV”, " + "aplicando-se a mesma redução da base de cálculo do ICMS ST na tributação, " + "se houver." + ), + ) + + VL_UNIT_ICMS_OP_CONV = fields.Float( + string="Valor unitário do ICMS OP calculado conforme", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do ICMS OP calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”, " + "utilizado para cálculo de ressarcimento/restituição de ST, no desfazimento" + " da substituição tributária, quando se utiliza a fórmula descrita nas " + "instruções de preenchimento do campo 11, no item a1)." + ), + ) + + VL_UNIT_ICMS_OP_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS que o contribuinte teria se creditado " + "referente à operação de entrada das mercadorias em estoque caso estivesse " + "submetida ao regime comum de tributação, calculado conforme a legislação " + "de cada UF, considerando a unidade utilizada para informar o campo " + "“QUANT_CONV”" + ), + ) + + VL_UNIT_ICMS_ST_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS/ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS/ST, incluindo FCP ST, das mercadorias em " + "estoque, considerando unidade utilizada para informar o campo " + "“QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_REST = fields.Float( + string="Valor unitário do total do ICMS/ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do total do ICMS/ST, incluindo FCP ST, a ser " + "restituído/ressarcido, calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_REST = fields.Float( + string="Valor unitário correspondente à parcela", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_REST”, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_COMPL = fields.Float( + string="Valor unitário do complemento do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do complemento do ICMS, incluindo FCP ST, considerando a " + "unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_COMPL = fields.Float( + string="VL_UNIT_FCP_ST_CONV_COMPL", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_COMPL”, considerando unidade utilizada para informar" + " o campo “QUANT_CONV”." + ), + ) + + reg_C330_ids_RegistroC321_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c321", + string="Itens dos Resumos Diários dos Documentos", + required=True, + ondelete="cascade", + help="Itens dos Resumos Diários dos Documentos (código 02)", + ) + + +class RegistroC350(models.AbstractModel): + "Nota Fiscal de venda a consumidor (código 02)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c350" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + SER = fields.Char(string="Série do documento fiscal", sped_length="3") + + SUB_SER = fields.Char(string="Subsérie do documento fiscal", sped_length="3") + + NUM_DOC = fields.Char(string="Número do documento fiscal", sped_length="6") + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + CNPJ_CPF = fields.Char( + string="CNPJ ou CPF do destinatário", xsd_type="numeric_code", sped_length="14" + ) + + VL_MERC = fields.Monetary( + string="Valor das mercadorias constantes", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor das mercadorias constantes no documento fiscal", + ) + + VL_DOC = fields.Monetary( + string="Valor total do documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor total do desconto", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS = fields.Monetary( + string="Valor total do PIS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_COFINS = fields.Monetary( + string="Valor total da COFINS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + reg_C370_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c370", + "reg_C370_ids_RegistroC350_id", + string="C370 Itens do documento (código 02)", + sped_card="1:N", + ) + + reg_C390_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c390", + "reg_C390_ids_RegistroC350_id", + string="C390 Registro Analítico das Notas Fiscais de Venda", + sped_card="1:N", + help=( + "C390 Registro Analítico das Notas Fiscais de Venda a Consumidor (código " + "02)" + ), + ) + + +class RegistroC370(models.AbstractModel): + "Itens do documento (código 02)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c370" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_ITEM = fields.Char( + string="Número sequencialdo item no documento fiscal", + xsd_type="numeric_code", + sped_length="3", + ) + + COD_ITEM = fields.Char( + string="Código do Item", + sped_length="6", + help="Código do Item (campo 02 do registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor total do item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor total do desconto no item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_C370_ids_RegistroC350_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c350", + string="Nota Fiscal de venda a consumidor", + required=True, + ondelete="cascade", + help="Nota Fiscal de venda a consumidor (código 02)", + ) + + reg_C380_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c380", + "reg_C380_ids_RegistroC370_id", + string="C380 Informações complementares das operações", + sped_card="1:1", + help=( + "C380 Informações complementares das operações de saída de mercadorias " + "sujeitas à substituição tributária (código 02)" + ), + ) + + +class RegistroC380(models.AbstractModel): + """Informações complementares das operações de saída de mercadorias + sujeitas à substituição tributária (código 02)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c380" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_MOT_REST_COMPL = fields.Char( + string="Código do motivo da restituição", + sped_length="5*", + help="Código do motivo da restituição ou complementação conforme Tabela 5.7", + ) + + QUANT_CONV = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + UNID = fields.Char( + string="Unidade adotada para informar o campo QUANT_CONV", sped_length="6" + ) + + VL_UNIT_CONV = fields.Float( + string="Valor unitário da mercadoria", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário da mercadoria, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_NA_OPERACAO_CONV = fields.Float( + string="Valor unitário para o ICMS na operação", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário para o ICMS na operação, caso não houvesse a ST, " + "considerando unidade utilizada para informar o campo “QUANT_CONV”, " + "aplicando-se a mesma redução da base de cálculo do ICMS ST na tributação, " + "se houver." + ), + ) + + VL_UNIT_ICMS_OP_CONV = fields.Float( + string="Valor unitário do ICMS OP calculado conforme", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do ICMS OP calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”, " + "utilizado para cálculo de ressarcimento/restituição de ST, no desfazimento" + " da substituição tributária, quando se utiliza a fórmula descrita nas " + "instruções de preenchimento do campo 11, no item a1)." + ), + ) + + VL_UNIT_ICMS_OP_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS que o contribuinte teria se creditado " + "referente à operação de entrada das mercadorias em estoque caso estivesse " + "submetida ao regime comum de tributação, calculado conforme a legislação " + "de cada UF, considerando a unidade utilizada para informar o campo " + "“QUANT_CONV”" + ), + ) + + VL_UNIT_ICMS_ST_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS/ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS/ST, incluindo FCP ST, das mercadorias em " + "estoque, considerando unidade utilizada para informar o campo " + "“QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_REST = fields.Float( + string="Valor unitário do total do ICMS/ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do total do ICMS/ST, incluindo FCP ST, a ser " + "restituído/ressarcido, calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_REST = fields.Float( + string="Valor unitário correspondente à parcela", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_REST”, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_COMPL = fields.Float( + string="Valor unitário do complemento do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do complemento do ICMS, incluindo FCP ST, considerando a " + "unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_COMPL = fields.Float( + string="VL_UNIT_FCP_ST_CONV_COMPL", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_COMPL”, considerando unidade utilizada para informar" + " o campo “QUANT_CONV”." + ), + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária referente ao ICMS", + xsd_type="numeric_code", + sped_length="3*", + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + reg_C380_ids_RegistroC370_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c370", + string="Itens do documento (código 02)", + required=True, + ondelete="cascade", + ) + + +class RegistroC390(models.AbstractModel): + """Registro Analítico das Notas Fiscais de Venda a Consumidor (código + 02)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c390" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor total acumulado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total acumulado das operações correspondentes à combinação de " + "CST_ICMS, CFOP e alíquota do ICMS, incluídas as despesas acessórias e " + "acréscimos" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor acumulado da base de cálculo do ICMS, referente à combinação de " + "CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor acumulado do ICMS, referente à combinação de CST_ICMS, CFOP e " + "alíquota do ICMS" + ), + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_C390_ids_RegistroC350_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c350", + string="Nota Fiscal de venda a consumidor", + required=True, + ondelete="cascade", + help="Nota Fiscal de venda a consumidor (código 02)", + ) + + +class RegistroC400(models.AbstractModel): + "Equipamento ECF (código 02, 2D e 60)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c400" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + ECF_MOD = fields.Char(string="Modelo do equipamento", sped_length="2") + + ECF_FAB = fields.Char( + string="Número de série de fabricação do ECF", sped_length="21" + ) + + ECF_CX = fields.Char( + string="Número do caixa atribuído ao ECF", + xsd_type="numeric_code", + sped_length="3", + ) + + reg_C405_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c405", + "reg_C405_ids_RegistroC400_id", + string="C405 Redução Z (código 02, 2D e 60)", + sped_card="1:N", + ) + + +class RegistroC405(models.AbstractModel): + "Redução Z (código 02, 2D e 60)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c405" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_DOC = fields.Date( + string="Data do movimento a que se refere a Redução Z", sped_length="8*" + ) + + CRO = fields.Char( + string="Posição do Contador de Reinício de Operação", + xsd_type="numeric_code", + sped_length="3", + ) + + CRZ = fields.Char( + string="Posição do Contador de Redução Z", + xsd_type="numeric_code", + sped_length="6", + ) + + NUM_COO_FIN = fields.Char( + string="Número do Contador de Ordem de Operação", + xsd_type="numeric_code", + sped_length="9", + help=( + "Número do Contador de Ordem de Operação do último documento emitido no " + "dia. (Número do COO na Redução Z)" + ), + ) + + GT_FIN = fields.Float( + string="Valor do Grande Total final", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_BRT = fields.Monetary( + string="Valor da venda bruta", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_C405_ids_RegistroC400_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c400", + string="Equipamento ECF (código 02, 2D e 60)", + required=True, + ondelete="cascade", + ) + + reg_C410_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c410", + "reg_C410_ids_RegistroC405_id", + string="C410 PIS e COFINS Totalizados no Dia", + sped_card="1:1", + help="C410 PIS e COFINS Totalizados no Dia (código 02 e 2D)", + ) + + reg_C420_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c420", + "reg_C420_ids_RegistroC405_id", + string="C420 Registro dos Totalizadores Parciais", + sped_card="1:N", + help=( + "C420 Registro dos Totalizadores Parciais da Redução Z (código 02, 2D e 60)" + ), + ) + + reg_C460_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c460", + "reg_C460_ids_RegistroC405_id", + string="C460 Documento Fiscal Emitido por ECF", + sped_card="1:N", + help="C460 Documento Fiscal Emitido por ECF (código 02, 2D e 60)", + ) + + reg_C490_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c490", + "reg_C490_ids_RegistroC405_id", + string="C490 Registro Analítico do movimento diário", + sped_card="1:N", + help="C490 Registro Analítico do movimento diário (código 02, 2D e 60)", + ) + + +class RegistroC410(models.AbstractModel): + "PIS e COFINS Totalizados no Dia (código 02 e 2D)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c410" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + VL_PIS = fields.Monetary( + string="Valor total do PIS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_COFINS = fields.Monetary( + string="Valor total da COFINS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_C410_ids_RegistroC405_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c405", + string="Redução Z (código 02, 2D e 60)", + required=True, + ondelete="cascade", + ) + + +class RegistroC420(models.AbstractModel): + """Registro dos Totalizadores Parciais da Redução Z (código 02, 2D e 60)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c420" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_TOT_PAR = fields.Char( + string="Código do totalizador", + sped_length="7", + help="Código do totalizador, conforme tabela 4.4.6", + ) + + VLR_ACUM_TOT = fields.Float( + string="Valor acumulado no totalizador", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Valor acumulado no totalizador, relativo à respectiva Redução Z", + ) + + NR_TOT = fields.Char( + string="Número do totalizador quando ocorrer", + xsd_type="numeric_code", + sped_length="2", + help=( + "Número do totalizador quando ocorrer mais de uma situação com a mesma " + "carga tributária efetiva" + ), + ) + + DESCR_NR_TOT = fields.Char( + string="Descrição da situação tributária relativa", + help=( + "Descrição da situação tributária relativa ao totalizador parcial, quando " + "houver mais de um com a mesma carga tributária efetiva" + ), + ) + + reg_C420_ids_RegistroC405_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c405", + string="Redução Z (código 02, 2D e 60)", + required=True, + ondelete="cascade", + ) + + reg_C425_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c425", + "reg_C425_ids_RegistroC420_id", + string="C425 Resumo de itens do movimento diário", + sped_card="1:N", + help="C425 Resumo de itens do movimento diário (código 02 e 2D)", + ) + + +class RegistroC425(models.AbstractModel): + "Resumo de itens do movimento diário (código 02 e 2D)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c425" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade acumulada do item", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor acumulado do item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + reg_C425_ids_RegistroC420_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c420", + string="Registro dos Totalizadores Parciais da Redução Z", + required=True, + ondelete="cascade", + help="Registro dos Totalizadores Parciais da Redução Z (código 02, 2D e 60)", + ) + + reg_C430_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c430", + "reg_C430_ids_RegistroC425_id", + string="C430 Informações complementares das operações", + sped_card="1:N", + help=( + "C430 Informações complementares das operações de saída de mercadorias " + "sujeitas à substituição tributária (código 02, 2D e 60)" + ), + ) + + +class RegistroC430(models.AbstractModel): + """Informações complementares das operações de saída de mercadorias + sujeitas à substituição tributária (código 02, 2D e 60)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c430" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 6 + + COD_MOT_REST_COMPL = fields.Char( + string="Código do motivo da restituição", + sped_length="5*", + help="Código do motivo da restituição ou complementação conforme Tabela 5.7", + ) + + QUANT_CONV = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + UNID = fields.Char( + string="Unidade adotada para informar o campo QUANT_CONV", sped_length="6" + ) + + VL_UNIT_CONV = fields.Float( + string="Valor unitário da mercadoria", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário da mercadoria, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_NA_OPERACAO_CONV = fields.Float( + string="Valor unitário para o ICMS na operação", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário para o ICMS na operação, caso não houvesse a ST, " + "considerando unidade utilizada para informar o campo “QUANT_CONV”, " + "considerando redução da base de cálculo do ICMS ST na tributação, se " + "houver." + ), + ) + + VL_UNIT_ICMS_OP_CONV = fields.Float( + string="Valor unitário do ICMS OP calculado conforme", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help="Valor unitário do ICMS OP calculado conforme a legislação de cada", + ) + + VL_UNIT_ICMS_OP_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS que o contribuinte teria se creditado " + "referente à operação de entrada das mercadorias em estoque caso estivesse " + "submetida ao regime comum de tributação, calculado conforme a legislação " + "de cada UF, considerando a unidade utilizada para informar o campo " + "“QUANT_CONV”" + ), + ) + + VL_UNIT_ICMS_ST_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS/ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS/ST, incluindo FCP ST, das mercadorias em " + "estoque, considerando unidade utilizada para informar o campo " + "“QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_REST = fields.Float( + string="Valor unitário do total do ICMS ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do total do ICMS ST, incluindo FCP ST, a ser " + "restituído/ressarcido, calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_REST = fields.Float( + string="Valor unitário correspondente à parcela", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_REST”, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_COMPL = fields.Float( + string="Valor unitário do complemento do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do complemento do ICMS, incluindo FCP ST, considerando a " + "unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_COMPL = fields.Float( + string="VL_UNIT_FCP_ST_CONV_COMPL", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_COMPL”, considerando unidade utilizada para informar" + " o campo “QUANT_CONV”." + ), + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária referente ao ICMS", + xsd_type="numeric_code", + sped_length="3*", + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + reg_C430_ids_RegistroC425_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c425", + string="Resumo de itens do movimento diário", + required=True, + ondelete="cascade", + help="Resumo de itens do movimento diário (código 02 e 2D)", + ) + + +class RegistroC460(models.AbstractModel): + "Documento Fiscal Emitido por ECF (código 02, 2D e 60)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c460" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + COD_SIT = fields.Char( + string="Código da situação do documento fiscal", + xsd_type="numeric_code", + sped_length="2*", + help="Código da situação do documento fiscal, conforme a tabela 4.1.2", + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal (COO)", + xsd_type="numeric_code", + sped_length="9", + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + VL_DOC = fields.Monetary( + string="Valor total do documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + CPF_CNPJ = fields.Char( + string="CPF ou CNPJ do adquirente", xsd_type="numeric_code", sped_length="14" + ) + + NOM_ADQ = fields.Char(string="Nome do adquirente", sped_length="6") + + reg_C460_ids_RegistroC405_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c405", + string="Redução Z (código 02, 2D e 60)", + required=True, + ondelete="cascade", + ) + + reg_C465_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c465", + "reg_C465_ids_RegistroC460_id", + string="C465 Complemento", + sped_card="1:1", + help=( + "C465 Complemento do Cupom Fiscal Eletrônico Emitido por ECF – CF-e-ECF " + "(código 60)." + ), + ) + + reg_C470_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c470", + "reg_C470_ids_RegistroC460_id", + string="C470 Itens do Documento Fiscal Emitido por ECF", + sped_card="1:N", + help="C470 Itens do Documento Fiscal Emitido por ECF (código 02 e 2D)", + ) + + +class RegistroC465(models.AbstractModel): + """Complemento do Cupom Fiscal Eletrônico Emitido por ECF – CF-e-ECF + (código 60).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c465" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + CHV_CFE = fields.Char( + string="Chave do Cupom Fiscal Eletrônico", + xsd_type="numeric_code", + sped_length="44", + ) + + NUM_CCF = fields.Char( + string="Número do Contador de Cupom Fiscal", + xsd_type="numeric_code", + sped_length="9", + ) + + reg_C465_ids_RegistroC460_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c460", + string="Documento Fiscal Emitido por ECF", + required=True, + ondelete="cascade", + help="Documento Fiscal Emitido por ECF (código 02, 2D e 60)", + ) + + +class RegistroC470(models.AbstractModel): + "Itens do Documento Fiscal Emitido por ECF (código 02 e 2D)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c470" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + QTD_CANC = fields.Float( + string="Quantidade cancelada", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help="Quantidade cancelada, no caso de cancelamento parcial de item", + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor do item", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1." + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Alíquota do ICMS - Carga tributária efetiva em percentual", + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + reg_C470_ids_RegistroC460_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c460", + string="Documento Fiscal Emitido por ECF", + required=True, + ondelete="cascade", + help="Documento Fiscal Emitido por ECF (código 02, 2D e 60)", + ) + + reg_C480_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c480", + "reg_C480_ids_RegistroC470_id", + string="C480 Informações complementares das operações", + sped_card="1:1", + help=( + "C480 Informações complementares das operações de saída de mercadorias " + "sujeitas à substituição tributária (código 02)" + ), + ) + + +class RegistroC480(models.AbstractModel): + """Informações complementares das operações de saída de mercadorias + sujeitas à substituição tributária (código 02)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c480" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 6 + + COD_MOT_REST_COMPL = fields.Char( + string="Código do motivo da restituição", + sped_length="5*", + help="Código do motivo da restituição ou complementação conforme Tabela 5.7", + ) + + QUANT_CONV = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + UNID = fields.Char( + string="Unidade adotada para informar o campo QUANT_CONV", sped_length="6" + ) + + VL_UNIT_CONV = fields.Float( + string="Valor unitário da mercadoria", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário da mercadoria, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_NA_OPERACAO_CONV = fields.Float( + string="Valor unitário para o ICMS na operação", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário para o ICMS na operação, caso não houvesse a ST, " + "considerando unidade utilizada para informar o campo “QUANT_CONV”, " + "aplicando-se a mesma redução da base de cálculo do ICMS ST na tributação, " + "se houver." + ), + ) + + VL_UNIT_ICMS_OP_CONV = fields.Float( + string="Valor unitário do ICMS OP calculado conforme", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do ICMS OP calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”, " + "utilizado para cálculo de ressarcimento/restituição de ST, no desfazimento" + " da substituição tributária, quando se utiliza a fórmula descrita nas " + "instruções de preenchimento do campo 11, no item a1)." + ), + ) + + VL_UNIT_ICMS_OP_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS que o contribuinte teria se creditado " + "referente à operação de entrada das mercadorias em estoque caso estivesse " + "submetida ao regime comum de tributação, calculado conforme a legislação " + "de cada UF, considerando a unidade utilizada para informar o campo " + "“QUANT_CONV”" + ), + ) + + VL_UNIT_ICMS_ST_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS/ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS/ST, incluindo FCP ST, das mercadorias em " + "estoque, considerando unidade utilizada para informar o campo " + "“QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_REST = fields.Float( + string="Valor unitário do total do ICMS/ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do total do ICMS/ST, incluindo FCP ST, a ser " + "restituído/ressarcido, calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_REST = fields.Float( + string="Valor unitário correspondente à parcela", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_REST”, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_COMPL = fields.Float( + string="Valor unitário do complemento do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do complemento do ICMS, incluindo FCP ST, considerando a " + "unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_COMPL = fields.Float( + string="VL_UNIT_FCP_ST_CONV_COMPL", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_COMPL”, considerando unidade utilizada para informar" + " o campo “QUANT_CONV”." + ), + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária referente ao ICMS", + xsd_type="numeric_code", + sped_length="3*", + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + reg_C480_ids_RegistroC470_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c470", + string="Itens do Documento Fiscal Emitido por ECF", + required=True, + ondelete="cascade", + help="Itens do Documento Fiscal Emitido por ECF (código 02 e 2D)", + ) + + +class RegistroC490(models.AbstractModel): + "Registro Analítico do movimento diário (código 02, 2D e 60)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c490" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da operação correspondente à combinação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da operação correspondente à combinação de CST_ICMS, CFOP e alíquota" + " do ICMS, incluídas as despesas acessórias e acréscimos" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor acumulado da base de cálculo do ICMS, referente à combinação de " + "CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor acumulado do ICMS, referente à combinação de CST_ICMS, CFOP e " + "alíquota do ICMS" + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_C490_ids_RegistroC405_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c405", + string="Redução Z (código 02, 2D e 60)", + required=True, + ondelete="cascade", + ) + + +class RegistroC495(models.AbstractModel): + """Resumo Mensal de Itens do ECF por Estabelecimento (código 02 e 2D e + 2E)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c495" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade acumulada do item", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + QTD_CANC = fields.Float( + string="Quantidade cancelada acumulada", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Quantidade cancelada acumulada, no caso de cancelamento parcial de item" + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor acumulado do item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor acumulado dos descontos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_CANC = fields.Monetary( + string="Valor acumulado dos cancelamentos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ACMO = fields.Monetary( + string="Valor acumulado dos acréscimos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ISEN = fields.Monetary( + string="Valor das saídas isentas do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_NT = fields.Monetary( + string="Valor das saídas sob não-incidência", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor das saídas sob não-incidência ou não-tributadas pelo ICMS", + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor das saídas de mercadorias adquiridas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor das saídas de mercadorias adquiridas com substituição tributária do " + "ICMS" + ), + ) + + +class RegistroC500(models.AbstractModel): + """Nota Fiscal/Conta de Energia Elétrica (código 06), Nota Fiscal de + Energia Elétrica Eletrônica (código 66) , Nota Fiscal/Conta de + fornecimento dágua canalizada (código 29) e Nota Fiscal/Consumo + Fornecimento de Gás (Código 28)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c500" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_OPER = fields.Char( + string="Indicador do tipo de operação", + sped_length="1*", + help="Indicador do tipo de operação: 0 - Entrada 1 - Saída", + ) + + IND_EMIT = fields.Char( + string="Indicador do emitente do documento fiscal", + sped_length="1*", + help=( + "Indicador do emitente do documento fiscal: 0 - Emissão própria 1 - " + "Terceiros" + ), + ) + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - do adquirente, no " + "caso das saídas; - do fornecedor no caso de entradas" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + COD_SIT = fields.Char( + string="Código da situação do documento fiscal", + xsd_type="numeric_code", + sped_length="2*", + help="Código da situação do documento fiscal, conforme a tabela 4.1.2", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + COD_CONS = fields.Char( + string="- Código de classe de consumo de energia elétrica", + sped_length="2*", + help=( + "- Código de classe de consumo de energia elétrica ou gás: 01 - Comercial " + "02 - Consumo Próprio 03 - Iluminação Pública 04 - Industrial 05 - Poder " + "Público 06 - Residencial 07 - Rural 08 - Serviço Público - Código de " + "Consumo de Fornecimento De água - tabela 4.4.2." + ), + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + DT_E_S = fields.Date(string="Data da entrada ou da saída", sped_length="8*") + + VL_DOC = fields.Monetary( + string="Valor total do documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor total do desconto", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_FORN = fields.Monetary( + string="Valor total fornecido/consumido", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV_NT = fields.Monetary( + string="Valor total dos serviços não-tributados pelo ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_TERC = fields.Monetary( + string="Valor total cobrado em nome de terceiros", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DA = fields.Monetary( + string="Valor total de despesas acessórias indicadas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total de despesas acessórias indicadas no documento fiscal", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Valor acumulado da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor acumulado da base de cálculo do ICMS substituição tributária", + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor acumulado do ICMS retido", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor acumulado do ICMS retido por substituição tributária", + ) + + COD_INF = fields.Char( + string="Código da informação complementar", + sped_length="6", + help=( + "Código da informação complementar do documento fiscal (campo 02 do " + "Registro 0450)" + ), + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + TP_LIGACAO = fields.Char( + string="Código de tipo de Ligação 1", + xsd_type="numeric_code", + sped_length="1*", + help="Código de tipo de Ligação 1 - Monofásico 2 - Bifásico 3 - Trifásico", + ) + + COD_GRUPO_TENSAO = fields.Char( + string="Código de grupo de tensão: 01 - A1", + sped_length="2*", + help=( + "Código de grupo de tensão: 01 - A1 - Alta Tensão (230kV ou mais) 02 - A2 -" + " Alta Tensão (88 a 138kV) 03 - A3 - Alta Tensão (69kV) 04 - A3a - Alta " + "Tensão (30kV a 44kV) 05 - A4 - Alta Tensão (2,3kV a 25kV) 06 - AS - Alta " + "Tensão Subterrâneo 06 07 - B1 - Residencial 07 08 - B1 - Residencial Baixa" + " Renda 08 09 - B2 - Rural 09 10 - B2 - Cooperativa de Eletrificação Rural " + "11 - B2 - Serviço Público de Irrigação 12 - B3 - Demais Classes 13 - B4a -" + " Iluminação Pública - rede de distribuição 14 - B4b - Iluminação Pública -" + " bulbo de lâmpada" + ), + ) + + CHV_DOCE = fields.Char( + string="Chave da Nota Fiscal", + xsd_type="numeric_code", + sped_length="44*", + help="Chave da Nota Fiscal de Energia Elétrica Eletrônica", + ) + + FIN_DOCE = fields.Char( + string="Finalidade da emissão do documento eletrônico", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Finalidade da emissão do documento eletrônico: 1 – Normal 2 – Substituição" + " 3 – Normal com ajuste" + ), + ) + + CHV_DOCE_REF = fields.Char( + string="Chave da nota referenciada", + xsd_type="numeric_code", + sped_length="44*", + help="Chave da nota referenciada, substituída.", + ) + + IND_DEST = fields.Char( + string="Indicador do Destinatário/Acessante", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Indicador do Destinatário/Acessante: 1 – Contribuinte do ICMS; 2 – " + "Contribuinte Isento de Inscrição no Cadastro de Contribuintes do ICMS; 9 –" + " Não Contribuinte." + ), + ) + + COD_MUN_DEST = fields.Char( + string="Código do município do destinatário conforme", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município do destinatário conforme a tabela do IBGE.", + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + COD_MOD_DOC_REF = fields.Char( + string="Código do modelo do documento fiscal referenciado", + xsd_type="numeric_code", + sped_length="2*", + help=( + "Código do modelo do documento fiscal referenciado, conforme a Tabela 4.1.1" + ), + ) + + HASH_DOC_REF = fields.Char( + string="Código de autenticação digital do registro", + sped_length="32", + help="Código de autenticação digital do registro (Convênio 115/2003).", + ) + + SER_DOC_REF = fields.Char( + string="Série do documento fiscal referenciado", sped_length="4" + ) + + NUM_DOC_REF = fields.Char( + string="Número do documento fiscal referenciado", + xsd_type="numeric_code", + sped_length="9", + ) + + MES_DOC_REF = fields.Char( + string="Mês e ano da emissão", + xsd_type="numeric_code", + sped_length="6*", + help="Mês e ano da emissão do documento fiscal referenciado.", + ) + + ENER_INJET = fields.Float( + string="Energia injetada", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + OUTRAS_DED = fields.Float( + string="Outras deduções", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + reg_C510_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c510", + "reg_C510_ids_RegistroC500_id", + string="C510 Itens do Documento", + sped_card="1:N", + help=( + "C510 Itens do Documento - Nota Fiscal/Conta de Energia Elétrica (código " + "06), Nota Fiscal/Conta de fornecimento d'agua canalizada (código 29) e " + "Nota Fiscal/Conta Fornecimento de Gás (Código 28)" + ), + ) + + reg_C590_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c590", + "reg_C590_ids_RegistroC500_id", + string="C590 Registro Analítico do Documento", + sped_card="1:N", + help=( + "C590 Registro Analítico do Documento - Nota Fiscal/Conta de Energia " + "Elétrica (código 06), Nota Fiscal de Energia Elétrica Eletrônica (código " + "66), Nota Fiscal/Conta de fornecimento d'água canalizada (código 29) e " + "Nota Fiscal/Conta" + ), + ) + + reg_C595_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c595", + "reg_C595_ids_RegistroC500_id", + string="C595 Observações do Lançamento Fiscal", + sped_card="1:N", + help="C595 Observações do Lançamento Fiscal (códigos 06, 28, 29 e 66)", + ) + + +class RegistroC510(models.AbstractModel): + """Itens do Documento - Nota Fiscal/Conta de Energia Elétrica (código 06), + Nota Fiscal/Conta de fornecimento d'agua canalizada (código 29) e Nota + Fiscal/Conta Fornecimento de Gás (Código 28)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c510" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_ITEM = fields.Char( + string="Número sequencial do item no documento fiscal", + xsd_type="numeric_code", + sped_length="3", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + COD_CLASS = fields.Char( + string="Código de classificação do item", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código de classificação do item de energia elétrica, conforme a tabela " + "4.4.1" + ), + ) + + QTD = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor do item", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_DESC = fields.Monetary( + string="Valor total do desconto", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS creditado/debitado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Valor da base de cálculo referente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da base de cálculo referente à substituição tributária", + ) + + ALIQ_ST = fields.Float( + string="Alíquota do ICMS da substituição tributária", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Alíquota do ICMS da substituição tributária na unidade da federação de " + "destino" + ), + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor do ICMS referente à substituição tributária", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + IND_REC = fields.Char( + string="Indicador do tipo de receita", + sped_length="1*", + help=( + "Indicador do tipo de receita: 0- Receita própria 1- Receita de terceiros" + ), + ) + + COD_PART = fields.Char( + string="Código do participante receptor da receita", + sped_length="6", + help=( + "Código do participante receptor da receita, terceiro da operação (campo 02" + " do Registro 0150)" + ), + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + reg_C510_ids_RegistroC500_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c500", + string="Nota Fiscal/Conta de Energia Elétrica", + required=True, + ondelete="cascade", + help=( + "Nota Fiscal/Conta de Energia Elétrica (código 06), Nota Fiscal de Energia " + "Elétrica Eletrônica (código 66) , Nota Fiscal/Conta de fornecimento dágua " + "canalizada (código 29) e Nota Fiscal/Consumo Fornecimento de Gás (Código " + "28)" + ), + ) + + +class RegistroC590(models.AbstractModel): + """Registro Analítico do Documento - Nota Fiscal/Conta de Energia Elétrica + (código 06), Nota Fiscal de Energia Elétrica Eletrônica (código 66), + Nota Fiscal/Conta de fornecimento d'água canalizada (código 29) e Nota + Fiscal/Conta""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c590" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1." + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + help="Código Fiscal de Operação e Prestação do agrupamento de itens", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da operação correspondente à combinação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da operação correspondente à combinação de CST_ICMS, CFOP e alíquota" + " do ICMS" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Parcela correspondente ao “Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao “Valor da base de cálculo do ICMS” referente à " + "combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ICMS' referente à combinação de " + "CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ICMS' da " + "substituição tributária referente à combinação de CST_ICMS, CFOP e " + "alíquota do ICMS" + ), + ) + + VL_ICMS_ST = fields.Monetary( + string="Parcela correspondente ao valor creditado/debitado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao valor creditado/debitado do ICMS da substituição" + " tributária, referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_C590_ids_RegistroC500_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c500", + string="Nota Fiscal/Conta de Energia Elétrica", + required=True, + ondelete="cascade", + help=( + "Nota Fiscal/Conta de Energia Elétrica (código 06), Nota Fiscal de Energia " + "Elétrica Eletrônica (código 66) , Nota Fiscal/Conta de fornecimento dágua " + "canalizada (código 29) e Nota Fiscal/Consumo Fornecimento de Gás (Código " + "28)" + ), + ) + + reg_C591_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c591", + "reg_C591_ids_RegistroC590_id", + string="C591 Informações do Fundo de Combate", + sped_card="1:1", + help=( + "C591 Informações do Fundo de Combate à Pobreza – FCP na NF3e (código 66)" + ), + ) + + +class RegistroC591(models.AbstractModel): + "Informações do Fundo de Combate à Pobreza – FCP na NF3e (código 66)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c591" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + VL_FCP_OP = fields.Monetary( + string="Valor do Fundo de Combate à Pobreza", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do Fundo de Combate à Pobreza (FCP) vinculado à operação própria, na" + " combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_FCP_ST = fields.Monetary( + string="Valor do Fundo de Combate à Pobreza (VL_FCP_ST)", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do Fundo de Combate à Pobreza (FCP) vinculado à operação de " + "substituição tributária, na combinação de CST_ICMS, CFOP e alíquota do " + "ICMS." + ), + ) + + reg_C591_ids_RegistroC590_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c590", + string="Registro Analítico do Documento", + required=True, + ondelete="cascade", + help=( + "Registro Analítico do Documento - Nota Fiscal/Conta de Energia Elétrica " + "(código 06), Nota Fiscal de Energia Elétrica Eletrônica (código 66), Nota " + "Fiscal/Conta de fornecimento d'água canalizada (código 29) e Nota " + "Fiscal/Conta" + ), + ) + + +class RegistroC595(models.AbstractModel): + "Observações do Lançamento Fiscal (códigos 06, 28, 29 e 66)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c595" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar do código de observação") + + reg_C595_ids_RegistroC500_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c500", + string="Nota Fiscal/Conta de Energia Elétrica", + required=True, + ondelete="cascade", + help=( + "Nota Fiscal/Conta de Energia Elétrica (código 06), Nota Fiscal de Energia " + "Elétrica Eletrônica (código 66) , Nota Fiscal/Conta de fornecimento dágua " + "canalizada (código 29) e Nota Fiscal/Consumo Fornecimento de Gás (Código " + "28)" + ), + ) + + reg_C597_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c597", + "reg_C597_ids_RegistroC595_id", + string="C597 Outras obrigações tributárias", + sped_card="1:N", + help=( + "C597 Outras obrigações tributárias, ajustes e informações de valores " + "provenientes de documento fiscal." + ), + ) + + +class RegistroC597(models.AbstractModel): + """Outras obrigações tributárias, ajustes e informações de valores + provenientes de documento fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c597" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_AJ = fields.Char( + string="Código do ajustes/benefício/incentivo", + sped_length="1*", + help=( + "Código do ajustes/benefício/incentivo, conforme tabela indicada no item " + "5.3." + ), + ) + + DESCR_COMPL_AJ = fields.Char( + string="Descrição complementar do ajuste", + help="Descrição complementar do ajuste do documento fiscal", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_BC_ICMS = fields.Monetary( + string="Base de cálculo do ICMS ou do ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS ou do ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUTROS = fields.Monetary( + string="Outros valores", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + reg_C597_ids_RegistroC595_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c595", + string="Observações do Lançamento Fiscal", + required=True, + ondelete="cascade", + help="Observações do Lançamento Fiscal (códigos 06, 28, 29 e 66)", + ) + + +class RegistroC600(models.AbstractModel): + """Consolidação Diária de Notas Fiscais/Contas de Energia Elétrica (Código + 06), Nota Fiscal/Conta de Fornecimento d´água (código 29) e Nota + Fiscal/Conta de Fornecimento de Gás (Código 28) - (Empresas não + obrigadas ao Convênio ICMS 115/03)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c600" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + COD_MUN = fields.Char( + string="Código do município dos pontos de consumo", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município dos pontos de consumo, conforme a tabela IBGE", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + COD_CONS = fields.Char( + string="- Código de classe de consumo de energia elétrica", + sped_length="2*", + help=( + "- Código de classe de consumo de energia elétrica ou gás: 01 - Comercial " + "02 - Consumo Próprio 03 - Iluminação Pública 04 - Industrial 05 - Poder " + "Público 06 - Residencial 07 - Rural 08 - Serviço Público - Código de " + "Consumo de Fornecimento de água - tabela 4.4.2." + ), + ) + + QTD_CONS = fields.Integer( + string="Quantidade", help="Quantidade de documentos consolidados neste registro" + ) + + QTD_CANC = fields.Integer(string="Quantidade de documentos cancelados") + + DT_DOC = fields.Date(string="Data dos documentos consolidados", sped_length="8*") + + VL_DOC = fields.Monetary( + string="Valor total dos documentos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor acumulado dos descontos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CONS = fields.Integer( + string="Consumo total acumulado", + help="Consumo total acumulado, em kWh (Código 06)", + ) + + VL_FORN = fields.Monetary( + string="Valor acumulado do fornecimento", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV_NT = fields.Monetary( + string="Valor acumulado dos serviços não-tributados", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor acumulado dos serviços não-tributados pelo ICMS", + ) + + VL_TERC = fields.Monetary( + string="Valores cobrados em nome de terceiros", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DA = fields.Monetary( + string="Valor acumulado das despesas acessórias", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Valor acumulado da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor acumulado da base de cálculo do ICMS substituição tributária", + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor acumulado do ICMS retido", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor acumulado do ICMS retido por substituição tributária", + ) + + VL_PIS = fields.Monetary( + string="Valor acumulado do PIS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_COFINS = fields.Monetary( + string="Valor acumulado COFINS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_C601_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c601", + "reg_C601_ids_RegistroC600_id", + string="C601 Documentos cancelados", + sped_card="1:N", + help=( + "C601 Documentos cancelados - Consolidação diária de notas fiscais/conta de" + " energia elétrica (Código 06), nota fiscal/conta de fornecimento de água " + "(código 29) e nota fiscal/conta de fornecimento de gás (código 28)" + ), + ) + + reg_C610_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c610", + "reg_C610_ids_RegistroC600_id", + string="C610 Itens do Documento Consolidado", + sped_card="1:N", + help=( + "C610 Itens do Documento Consolidado - Notas Fiscais/Contas de Energia " + "Elétrica (Código 06), Nota Fiscal/Conta de Fornecimento d´água (código 29)" + " e Nota Fiscal/Conta de Fornecimento de Gás (Código 28) - (Empresas não " + "obrigadas ao Convênio ICMS 115/03)" + ), + ) + + reg_C690_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c690", + "reg_C690_ids_RegistroC600_id", + string="C690 Registro Analítico dos Documentos", + sped_card="1:N", + help=( + "C690 Registro Analítico dos Documentos - Notas Fiscais/Contas de Energia " + "Elétrica (Código 06), Nota Fiscal/Conta de Fornecimento d´água (código 29)" + " e Nota" + ), + ) + + +class RegistroC601(models.AbstractModel): + """Documentos cancelados - Consolidação diária de notas fiscais/conta de + energia elétrica (Código 06), nota fiscal/conta de fornecimento de água + (código 29) e nota fiscal/conta de fornecimento de gás (código 28)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c601" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_DOC_CANC = fields.Char( + string="Número do documento fiscal cancelado", + xsd_type="numeric_code", + sped_length="9", + ) + + reg_C601_ids_RegistroC600_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c600", + string="Consolidação Diária de Notas Fiscais/Contas", + required=True, + ondelete="cascade", + help=( + "Consolidação Diária de Notas Fiscais/Contas de Energia Elétrica (Código " + "06), Nota Fiscal/Conta de Fornecimento d´água (código 29) e Nota " + "Fiscal/Conta de Fornecimento de Gás (Código 28) - (Empresas não obrigadas " + "ao Convênio ICMS 115/03)" + ), + ) + + +class RegistroC610(models.AbstractModel): + """Itens do Documento Consolidado - Notas Fiscais/Contas de Energia + Elétrica (Código 06), Nota Fiscal/Conta de Fornecimento d´água (código + 29) e Nota Fiscal/Conta de Fornecimento de Gás (Código 28) - (Empresas + não obrigadas ao Convênio ICMS 115/03)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c610" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_CLASS = fields.Char( + string="Código de classificação do item", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código de classificação do item de energia elétrica, conforme tabela 4.4.1" + ), + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade acumulada do item", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor acumulado do item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor acumulado dos descontos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código Fiscal de Operação e Prestação conforme tabela indicada no item " + "4.2.2" + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS debitado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Valor da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da base de cálculo do ICMS substituição tributária", + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor do ICMS retido por substituição tributária", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + reg_C610_ids_RegistroC600_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c600", + string="Consolidação Diária de Notas Fiscais/Contas", + required=True, + ondelete="cascade", + help=( + "Consolidação Diária de Notas Fiscais/Contas de Energia Elétrica (Código " + "06), Nota Fiscal/Conta de Fornecimento d´água (código 29) e Nota " + "Fiscal/Conta de Fornecimento de Gás (Código 28) - (Empresas não obrigadas " + "ao Convênio ICMS 115/03)" + ), + ) + + +class RegistroC690(models.AbstractModel): + """Registro Analítico dos Documentos - Notas Fiscais/Contas de Energia + Elétrica (Código 06), Nota Fiscal/Conta de Fornecimento d´água (código + 29) e Nota""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c690" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código Fiscal de Operação e Prestação, conforme a tabela indicada no item " + "4.2.2" + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da operação correspondente à combinação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da operação correspondente à combinação de CST_ICMS, CFOP e alíquota" + " do ICMS" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ICMS' referente à " + "combinação CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ICMS' referente à combinação CST_ICMS," + " CFOP e alíquota do ICMS" + ), + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Valor da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da base de cálculo do ICMS substituição tributária", + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor do ICMS retido por substituição tributária", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_C690_ids_RegistroC600_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c600", + string="Consolidação Diária de Notas Fiscais/Contas", + required=True, + ondelete="cascade", + help=( + "Consolidação Diária de Notas Fiscais/Contas de Energia Elétrica (Código " + "06), Nota Fiscal/Conta de Fornecimento d´água (código 29) e Nota " + "Fiscal/Conta de Fornecimento de Gás (Código 28) - (Empresas não obrigadas " + "ao Convênio ICMS 115/03)" + ), + ) + + +class RegistroC700(models.AbstractModel): + """Consolidação dos Documentos Nota Fiscal/Conta Energia Elétrica (código + 06) emitidas em via única - (Empresas obrigadas à entrega do arquivo + previsto no Convênio ICMS 115/03), Nota Fiscal/Conta de Fornecimento de + Gás Canalizado (Código 28) e Nota Fiscal de Energia Elétrica Eletrônica + (código 66)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c700" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + NRO_ORD_INI = fields.Char( + string="Número de ordem inicial", xsd_type="numeric_code", sped_length="9" + ) + + NRO_ORD_FIN = fields.Char( + string="Número de ordem final", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC_INI = fields.Date( + string="Data de emissão inicial", + sped_length="8*", + help=( + "Data de emissão inicial dos documentos / Data inicial de vencimento da " + "fatura" + ), + ) + + DT_DOC_FIN = fields.Date( + string="Data de emissão final dos documentos / Data final", + sped_length="8*", + help=( + "Data de emissão final dos documentos / Data final do vencimento da fatura" + ), + ) + + NOM_MEST = fields.Char( + string="Nome do arquivo Mestre de Documento Fiscal", sped_length="33" + ) + + CHV_COD_DIG = fields.Char( + string="Chave de codificação digital do arquivo Mestre", + sped_length="32", + help="Chave de codificação digital do arquivo Mestre de Documento Fiscal", + ) + + reg_C790_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c790", + "reg_C790_ids_RegistroC700_id", + string="C790 Registro Analítico dos Documentos", + sped_card="1:N", + help="C790 Registro Analítico dos Documentos (Códigos 06, 28 e 66)", + ) + + +class RegistroC790(models.AbstractModel): + "Registro Analítico dos Documentos (Códigos 06, 28 e 66)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c790" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código Fiscal de Operação e Prestação, conforme a tabela indicada no item " + "4.2.2" + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da operação correspondente à combinação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da operação correspondente à combinação de CST_ICMS, CFOP e alíquota" + " do ICMS" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ICMS' referente à " + "combinação CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ICMS' referente à combinação CST_ICMS," + " CFOP e alíquota do ICMS" + ), + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Valor da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da base de cálculo do ICMS substituição tributária", + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor do ICMS retido por substituição tributária", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_C790_ids_RegistroC700_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c700", + string="Consolidação", + required=True, + ondelete="cascade", + help=( + "Consolidação dos Documentos Nota Fiscal/Conta Energia Elétrica (código 06)" + " emitidas em via única - (Empresas obrigadas à entrega do arquivo previsto" + " no Convênio ICMS 115/03), Nota Fiscal/Conta de Fornecimento de Gás " + "Canalizado (Código 28) e Nota Fiscal de Energia Elétrica Eletrônica " + "(código 66)" + ), + ) + + reg_C791_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c791", + "reg_C791_ids_RegistroC790_id", + string="C791 Registro de Informações de ICMS ST por UF", + sped_card="1:N", + help="C791 Registro de Informações de ICMS ST por UF (Códigos 06 e 66)", + ) + + +class RegistroC791(models.AbstractModel): + "Registro de Informações de ICMS ST por UF (Códigos 06 e 66)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c791" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + UF = fields.Char( + string="Sigla da unidade da federação a que se refere", + sped_length="2*", + help="Sigla da unidade da federação a que se refere a retenção ST", + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Valor da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da base de cálculo do ICMS substituição tributária", + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor do ICMS retido por substituição tributária", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_C791_ids_RegistroC790_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c790", + string="Registro Analítico dos Documentos", + required=True, + ondelete="cascade", + help="Registro Analítico dos Documentos (Códigos 06, 28 e 66)", + ) + + +class RegistroC800(models.AbstractModel): + "Registro Cupom Fiscal Eletrônico - CF-e-SAT (Código 59)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c800" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + COD_SIT = fields.Char( + string="Código da situação do documento fiscal", + xsd_type="numeric_code", + sped_length="2", + help="Código da situação do documento fiscal, conforme a tabela 4.1.2", + ) + + NUM_CFE = fields.Char( + string="Número do Cupom Fiscal Eletrônico", + xsd_type="numeric_code", + sped_length="6", + ) + + DT_DOC = fields.Date( + string="Data da emissão do Cupom Fiscal Eletrônico", sped_length="8" + ) + + VL_CFE = fields.Monetary( + string="Valor total do Cupom Fiscal Eletrônico", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS = fields.Monetary( + string="Valor total do PIS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_COFINS = fields.Monetary( + string="Valor total da COFINS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CNPJ_CPF = fields.Char( + string="CNPJ ou CPF do destinatário", xsd_type="numeric_code", sped_length="14" + ) + + NR_SAT = fields.Char( + string="Número de Série do equipamento SAT", + xsd_type="numeric_code", + sped_length="9", + ) + + CHV_CFE = fields.Char( + string="Chave do Cupom Fiscal Eletrônico", + xsd_type="numeric_code", + sped_length="44", + ) + + VL_DESC = fields.Monetary( + string="Valor total de descontos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_MERC = fields.Monetary( + string="Valor total das mercadorias e serviços", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUT_DA = fields.Monetary( + string="Valor total de outras despesas acessórias", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total de outras despesas acessórias e acréscimos", + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_PIS_ST = fields.Monetary( + string="Valor total do PIS retido por subst", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total do PIS retido por subst. trib.", + ) + + VL_COFINS_ST = fields.Monetary( + string="Valor total da COFINS retido por subst", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total da COFINS retido por subst. trib.", + ) + + reg_C810_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c810", + "reg_C810_ids_RegistroC800_id", + string="C810 Itens do documento", + sped_card="1:N", + help=( + "C810 Itens do documento do cupom fiscal eletrônico – SAT (CF-E-SAT) " + "(código 59)" + ), + ) + + reg_C850_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c850", + "reg_C850_ids_RegistroC800_id", + string="C850 Registro Analítico do CF-e-SAT", + sped_card="1:N", + help="C850 Registro Analítico do CF-e-SAT (Código 59)", + ) + + reg_C855_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c855", + "reg_C855_ids_RegistroC800_id", + string="C855 Observações do lançamento fiscal", + sped_card="1:N", + help="C855 Observações do lançamento fiscal (Código 59)", + ) + + +class RegistroC810(models.AbstractModel): + """Itens do documento do cupom fiscal eletrônico – SAT (CF-E-SAT) (código + 59)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c810" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_ITEM = fields.Char( + string="Número do item no documento fiscal", + xsd_type="numeric_code", + sped_length="3", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1605", + digits=( + 16, + 5, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor total do item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total do item (mercadorias ou serviços)", + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária referente ao ICMS", + xsd_type="numeric_code", + sped_length="3*", + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + reg_C810_ids_RegistroC800_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c800", + string="Registro Cupom Fiscal Eletrônico", + required=True, + ondelete="cascade", + help="Registro Cupom Fiscal Eletrônico - CF-e-SAT (Código 59)", + ) + + reg_C815_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c815", + "reg_C815_ids_RegistroC810_id", + string="C815 Informações complementares das operações", + sped_card="1:1", + help=( + "C815 Informações complementares das operações de saída de mercadorias " + "sujeitas à substituição tributária (CF-E-SAT) (código 59)" + ), + ) + + +class RegistroC815(models.AbstractModel): + """Informações complementares das operações de saída de mercadorias + sujeitas à substituição tributária (CF-E-SAT) (código 59)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c815" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_MOT_REST_COMPL = fields.Char( + string="Código do motivo da restituição", + sped_length="5*", + help="Código do motivo da restituição ou complementação conforme Tabela 5.7", + ) + + QUANT_CONV = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + UNID = fields.Char( + string="Unidade adotada para informar o campo QUANT_CONV", sped_length="6" + ) + + VL_UNIT_CONV = fields.Float( + string="Valor unitário da mercadoria", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário da mercadoria, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_NA_OPERACAO_CONV = fields.Float( + string="Valor unitário para o ICMS na operação", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário para o ICMS na operação, caso não houvesse a ST, " + "considerando unidade utilizada para informar o campo “QUANT_CONV”, " + "aplicando-se a mesma redução da base de cálculo do ICMS ST na tributação, " + "se houver." + ), + ) + + VL_UNIT_ICMS_OP_CONV = fields.Float( + string="Valor unitário do ICMS OP calculado conforme", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do ICMS OP calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”, " + "utilizado para cálculo de ressarcimento/restituição de ST, no desfazimento" + " da substituição tributária, quando se utiliza a fórmula descrita nas " + "instruções de preenchimento do campo 11, no item a1)." + ), + ) + + VL_UNIT_ICMS_OP_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS que o contribuinte teria se creditado " + "referente à operação de entrada das mercadorias em estoque caso estivesse " + "submetida ao regime comum de tributação, calculado conforme a legislação " + "de cada UF, considerando a unidade utilizada para informar o campo " + "“QUANT_CONV”" + ), + ) + + VL_UNIT_ICMS_ST_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS/ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor médio unitário do ICMS/ST, incluindo FCP ST, das mercadorias em " + "estoque, considerando unidade utilizada para informar o campo " + "“QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_REST = fields.Float( + string="Valor unitário do total do ICMS/ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do total do ICMS/ST, incluindo FCP ST, a ser " + "restituído/ressarcido, calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_REST = fields.Float( + string="Valor unitário correspondente à parcela", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_REST”, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_COMPL = fields.Float( + string="Valor unitário do complemento do ICMS", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário do complemento do ICMS, incluindo FCP ST, considerando a " + "unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_COMPL = fields.Float( + string="VL_UNIT_FCP_ST_CONV_COMPL", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_COMPL”, considerando unidade utilizada para informar" + " o campo “QUANT_CONV”." + ), + ) + + reg_C815_ids_RegistroC810_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c810", + string="Itens do documento", + required=True, + ondelete="cascade", + help=( + "Itens do documento do cupom fiscal eletrônico – SAT (CF-E-SAT) (código 59)" + ), + ) + + +class RegistroC850(models.AbstractModel): + "Registro Analítico do CF-e-SAT (Código 59)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c850" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3", + help=( + "Código da Situação Tributária, conforme a Tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4", + help="Código Fiscal de Operação e Prestação do agrupamento de itens", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="“Valor total do CF-e” na combinação de CST_ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "“Valor total do CF-e” na combinação de CST_ICMS, CFOP e alíquota do ICMS, " + "correspondente ao somatório do valor líquido dos itens." + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor acumulado da base de cálculo do ICMS, referente à combinação de " + "CST_ICMS, CFOP, e alíquota do ICMS." + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao “Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao “Valor do ICMS” referente à combinação de " + "CST_ICMS, CFOP e alíquota do ICMS." + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do registro 0460)", + ) + + reg_C850_ids_RegistroC800_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c800", + string="Registro Cupom Fiscal Eletrônico", + required=True, + ondelete="cascade", + help="Registro Cupom Fiscal Eletrônico - CF-e-SAT (Código 59)", + ) + + +class RegistroC855(models.AbstractModel): + "Observações do lançamento fiscal (Código 59)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c855" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar do código de observação") + + reg_C855_ids_RegistroC800_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c800", + string="Registro Cupom Fiscal Eletrônico", + required=True, + ondelete="cascade", + help="Registro Cupom Fiscal Eletrônico - CF-e-SAT (Código 59)", + ) + + reg_C857_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c857", + "reg_C857_ids_RegistroC855_id", + string="C857 Outras obrigações tributárias", + sped_card="1:N", + help=( + "C857 Outras obrigações tributárias, ajustes e informações de valores " + "provenientes de documento fiscal" + ), + ) + + +class RegistroC857(models.AbstractModel): + """Outras obrigações tributárias, ajustes e informações de valores + provenientes de documento fiscal""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c857" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_AJ = fields.Char( + string="Código do ajustes/benefício/incentivo", + sped_length="1*", + help=( + "Código do ajustes/benefício/incentivo, conforme tabela indicada no item " + "5.3" + ), + ) + + DESCR_COMPL_AJ = fields.Char( + string="Descrição complementar do ajuste", + help="Descrição complementar do ajuste do documento fiscal", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_BC_ICMS = fields.Monetary( + string="Base de cálculo do ICMS ou do ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS ou do ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_C857_ids_RegistroC855_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c855", + string="Observações do lançamento fiscal", + required=True, + ondelete="cascade", + help="Observações do lançamento fiscal (Código 59)", + ) + + +class RegistroC860(models.AbstractModel): + "Identificação do equipamento SAT-CF-e (Código 59)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c860" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + NR_SAT = fields.Char( + string="Número de Série do equipamento SAT", + xsd_type="numeric_code", + sped_length="9", + ) + + DT_DOC = fields.Date( + string="Data de emissão dos documentos fiscais", sped_length="8" + ) + + DOC_INI = fields.Char( + string="Número do documento inicial", xsd_type="numeric_code", sped_length="6" + ) + + DOC_FIM = fields.Char( + string="Número do documento final", xsd_type="numeric_code", sped_length="6" + ) + + reg_C870_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c870", + "reg_C870_ids_RegistroC860_id", + string="C870 Itens do documento", + sped_card="1:N", + help=( + "C870 Itens do documento do cupom fiscal eletrônico – SAT (CF-E-SAT) " + "(código 59)" + ), + ) + + reg_C890_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c890", + "reg_C890_ids_RegistroC860_id", + string="C890 Resumo diário de CF-e- SAT", + sped_card="1:N", + help="C890 Resumo diário de CF-e- SAT (Código 59) por equipamento SAT-CF-e", + ) + + reg_C895_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c895", + "reg_C895_ids_RegistroC860_id", + string="C895 Observações do lançamento fiscal", + sped_card="1:N", + help="C895 Observações do lançamento fiscal (Código 59)", + ) + + +class RegistroC870(models.AbstractModel): + """Itens do documento do cupom fiscal eletrônico – SAT (CF-E-SAT) (código + 59)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c870" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1605", + digits=( + 16, + 5, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária referente ao ICMS", + xsd_type="numeric_code", + sped_length="3*", + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + reg_C870_ids_RegistroC860_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c860", + string="Identificação do equipamento SAT-CF-e", + required=True, + ondelete="cascade", + help="Identificação do equipamento SAT-CF-e (Código 59)", + ) + + reg_C880_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c880", + "reg_C880_ids_RegistroC870_id", + string="C880 Informações complementares das operações", + sped_card="1:1", + help=( + "C880 Informações complementares das operações de saída de mercadorias " + "sujeitas à substituição tributária (CF-E-SAT) (código 59)" + ), + ) + + +class RegistroC880(models.AbstractModel): + """Informações complementares das operações de saída de mercadorias + sujeitas à substituição tributária (CF-E-SAT) (código 59)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c880" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_MOT_REST_COMPL = fields.Char( + string="Código do motivo da restituição", + sped_length="5*", + help="Código do motivo da restituição ou complementação conforme Tabela 5.7", + ) + + QUANT_CONV = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + UNID = fields.Char( + string="Unidade adotada para informar o campo QUANT_CONV", sped_length="6" + ) + + VL_UNIT_CONV = fields.Float( + string="Valor unitário da mercadoria", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor unitário da mercadoria, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_NA_OPERACAO_CONV = fields.Float( + string="Valor unitário para o ICMS na operação", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor unitário para o ICMS na operação, caso não houvesse a ST, " + "considerando unidade utilizada para informar o campo “QUANT_CONV”, " + "aplicando-se a mesma redução da base de cálculo do ICMS ST na tributação, " + "se houver." + ), + ) + + VL_UNIT_ICMS_OP_CONV = fields.Float( + string="Valor unitário do ICMS OP calculado conforme", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor unitário do ICMS OP calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”, " + "utilizado para cálculo de ressarcimento/restituição de ST, no desfazimento" + " da substituição tributária, quando se utiliza a fórmula descrita nas " + "instruções de preenchimento do campo 11, no item a1)." + ), + ) + + VL_UNIT_ICMS_OP_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor médio unitário do ICMS que o contribuinte teria se creditado " + "referente à operação de entrada das mercadorias em estoque caso estivesse " + "submetida ao regime comum de tributação, calculado conforme a legislação " + "de cada UF, considerando a unidade utilizada para informar o campo " + "“QUANT_CONV”" + ), + ) + + VL_UNIT_ICMS_ST_ESTOQUE_CONV = fields.Float( + string="Valor médio unitário do ICMS/ST", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor médio unitário do ICMS/ST, incluindo FCP ST, das mercadorias em " + "estoque, considerando unidade utilizada para informar o campo " + "“QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_REST = fields.Float( + string="Valor unitário do total do ICMS ST", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor unitário do total do ICMS ST, incluindo FCP ST, a ser " + "restituído/ressarcido, calculado conforme a legislação de cada UF, " + "considerando a unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_REST = fields.Float( + string="Valor unitário correspondente à parcela", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_REST”, considerando a unidade utilizada para " + "informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_ICMS_ST_CONV_COMPL = fields.Float( + string="Valor unitário do complemento do ICMS", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor unitário do complemento do ICMS, incluindo FCP ST, considerando a " + "unidade utilizada para informar o campo “QUANT_CONV”." + ), + ) + + VL_UNIT_FCP_ST_CONV_COMPL = fields.Float( + string="VL_UNIT_FCP_ST_CONV_COMPL", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Valor unitário correspondente à parcela de ICMS FCP ST que compõe o campo " + "“VL_UNIT_ICMS_ST_CONV_COMPL”, considerando unidade utilizada para informar" + " o campo “QUANT_CONV”." + ), + ) + + reg_C880_ids_RegistroC870_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c870", + string="Itens do documento", + required=True, + ondelete="cascade", + help=( + "Itens do documento do cupom fiscal eletrônico – SAT (CF-E-SAT) (código 59)" + ), + ) + + +class RegistroC890(models.AbstractModel): + "Resumo diário de CF-e- SAT (Código 59) por equipamento SAT-CF-e" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c890" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4", + help="Código Fiscal de Operação e Prestação do agrupamento de itens", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="“Valor total do CF-e” na combinação de CST_ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "“Valor total do CF-e” na combinação de CST_ICMS, CFOP e alíquota do ICMS, " + "correspondente ao somatório do valor líquido dos itens" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor acumulado da base de cálculo do ICMS, referente à combinação de " + "CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ICMS' referente à combinação de " + "CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do registro 0460)", + ) + + reg_C890_ids_RegistroC860_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c860", + string="Identificação do equipamento SAT-CF-e", + required=True, + ondelete="cascade", + help="Identificação do equipamento SAT-CF-e (Código 59)", + ) + + +class RegistroC895(models.AbstractModel): + "Observações do lançamento fiscal (Código 59)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c895" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar do código de observação") + + reg_C895_ids_RegistroC860_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c860", + string="Identificação do equipamento SAT-CF-e", + required=True, + ondelete="cascade", + help="Identificação do equipamento SAT-CF-e (Código 59)", + ) + + reg_C897_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.c897", + "reg_C897_ids_RegistroC895_id", + string="C897 Outras obrigações tributárias", + sped_card="1:N", + help=( + "C897 Outras obrigações tributárias, ajustes e informações de valores " + "provenientes de documento fiscal" + ), + ) + + +class RegistroC897(models.AbstractModel): + """Outras obrigações tributárias, ajustes e informações de valores + provenientes de documento fiscal""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.c897" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_AJ = fields.Char( + string="Código do ajustes/benefício/incentivo", + sped_length="1*", + help=( + "Código do ajustes/benefício/incentivo, conforme tabela indicada no item " + "5.3" + ), + ) + + DESCR_COMPL_AJ = fields.Char( + string="Descrição complementar do ajuste", + help="Descrição complementar do ajuste do documento fiscal", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_BC_ICMS = fields.Monetary( + string="Base de cálculo do ICMS ou do ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS ou do ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUTROS = fields.Monetary( + string="Outros valores", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + reg_C897_ids_RegistroC895_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.c895", + string="Observações do lançamento fiscal", + required=True, + ondelete="cascade", + help="Observações do lançamento fiscal (Código 59)", + ) + + +class RegistroD100(models.AbstractModel): + """Registro D100- Nota Fiscal de Serviço de Transporte (código 07) e + Conhecimentos de transporte Rodoviário de Cargas (código 08), + Conhecimentos de Transporte de Cargas Avulso (código 8b), Aquaviário de + Cargas (código 09), Aéreo (código 10), Ferroviário de Cargas (código + 11), Multimodal de Cargas (código 26), Nota Fiscal de Transporte + ferroviário de carga (código 27), conhecimento de transporte eletrônico + – ct-e (código 57) e conhecimento de transporte eletrônico para outros + serviços - ct-e os (código 67) e bilhete de passagem eletrônico (código + 63).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d100" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_OPER = fields.Char( + string="Indicador do tipo de operação", + sped_length="1*", + help="Indicador do tipo de operação: 0- Aquisição 1- Prestação", + ) + + IND_EMIT = fields.Char( + string="Indicador do emitente do documento fiscal", + sped_length="1*", + help=( + "Indicador do emitente do documento fiscal: 0- Emissão própria 1- Terceiros" + ), + ) + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - do prestador de " + "serviço, no caso de aquisição de serviço - do tomador do serviço, no caso " + "de prestação de serviços" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + COD_SIT = fields.Char( + string="Código da situação do documento fiscal", + xsd_type="numeric_code", + sped_length="2*", + help="Código da situação do documento fiscal, conforme a tabela 4.1.2", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char(string="Subsérie do documento fiscal", sped_length="3") + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + CHV_CTE = fields.Char( + string="Chave do Conhecimento de Transporte Eletrônico", + xsd_type="numeric_code", + sped_length="44*", + help=( + "Chave do Conhecimento de Transporte Eletrônico ou do Bilhete de Passagem " + "Eletrônico" + ), + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + DT_A_P = fields.Date( + string="Data da aquisição ou da prestação do serviço", sped_length="8*" + ) + + TP_CT_E = fields.Char( + string="Tipo de Conhecimento", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Tipo de Conhecimento de Transporte Eletrônico conforme definido no Manual " + "de" + ), + ) + + CHV_CTE_REF = fields.Char( + string="Chave do Documento Eletrônico Substituído", + xsd_type="numeric_code", + sped_length="44*", + ) + + VL_DOC = fields.Monetary( + string="Valor total do documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor total do desconto", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + IND_FRT = fields.Char( + string="Indicador do tipo do frete", + sped_length="1*", + help=( + "Indicador do tipo do frete: 0- Por conta do emitente 1- Por conta do " + "destinatário/remetente 2- Por conta de terceiros 9- Sem cobrança de frete" + ), + ) + + VL_SERV = fields.Monetary( + string="Valor total da prestação de serviço", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_NT = fields.Monetary( + string="Valor não-tributado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + COD_INF = fields.Char( + string="Código da informação complementar", + sped_length="6", + help=( + "Código da informação complementar do documento fiscal (campo 02 do " + "Registro 0450)" + ), + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + COD_MUN_ORIG = fields.Char( + string="Código do município de origem do serviço", + xsd_type="numeric_code", + sped_length="7*", + help=( + "Código do município de origem do serviço, conforme a tabela IBGE " + "(Preencher com 9999999, se Exterior)" + ), + ) + + COD_MUN_DEST = fields.Char( + string="Código do município de destino", + xsd_type="numeric_code", + sped_length="7*", + help=( + "Código do município de destino, conforme a tabela IBGE (Preencher com " + "9999999, se Exterior)" + ), + ) + + reg_D140_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d140", + "reg_D140_ids_RegistroD100_id", + string="D140 Complemento do Conhecimento Aquaviário", + sped_card="1:1", + help="D140 Complemento do Conhecimento Aquaviário de Cargas (código 09)", + ) + + reg_D150_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d150", + "reg_D150_ids_RegistroD100_id", + string="D150 Complemento do Conhecimento Aéreo de Cargas", + sped_card="1:1", + help="D150 Complemento do Conhecimento Aéreo de Cargas (código 10)", + ) + + reg_D170_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d170", + "reg_D170_ids_RegistroD100_id", + string="D170 Complemento do Conhecimento Multimodal", + sped_card="1:1", + help="D170 Complemento do Conhecimento Multimodal de Cargas (código 26)", + ) + + reg_D110_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d110", + "reg_D110_ids_RegistroD100_id", + string="D110 Itens do documento", + sped_card="1:N", + help=( + "D110 Itens do documento - Nota Fiscal de Serviços de Transporte (código " + "07)" + ), + ) + + reg_D130_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d130", + "reg_D130_ids_RegistroD100_id", + string="D130 Complemento do Conhecimento Rodoviário", + sped_card="1:N", + help=( + "D130 Complemento do Conhecimento Rodoviário de Cargas (código 08), do " + "Conhecimento Rodoviário de Cargas Avulso (código 8B) e do Conhecimento de " + "Transporte Eletrônico Simplificado (código 57)" + ), + ) + + reg_D160_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d160", + "reg_D160_ids_RegistroD100_id", + string="D160 Carga Transportada", + sped_card="1:N", + help="D160 Carga Transportada (CÓDIGO 08, 8B, 09, 10, 11, 26 E 27)", + ) + + reg_D180_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d180", + "reg_D180_ids_RegistroD100_id", + string="D180 Modais (código 26)", + sped_card="1:N", + ) + + reg_D190_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d190", + "reg_D190_ids_RegistroD100_id", + string="D190 Registro Analítico dos Documentos", + sped_card="1:N", + help=( + "D190 Registro Analítico dos Documentos (CÓDIGO 07, 08, 8B, 09, 10, 11, 26," + " 27, 57, 63 e 67)" + ), + ) + + reg_D195_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d195", + "reg_D195_ids_RegistroD100_id", + string="D195 Observações do lançamento fiscal", + sped_card="1:N", + ) + + +class RegistroD110(models.AbstractModel): + """Itens do documento - Nota Fiscal de Serviços de Transporte (código + 07)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d110" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_ITEM = fields.Char( + string="Número sequencial do item no documento fiscal", + xsd_type="numeric_code", + sped_length="3", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_SERV = fields.Monetary( + string="Valor do serviço", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUT = fields.Monetary( + string="Outros valores", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + reg_D110_ids_RegistroD100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d100", + string="Registro D100- Nota Fiscal de Serviço", + required=True, + ondelete="cascade", + help=( + "Registro D100- Nota Fiscal de Serviço de Transporte (código 07) e " + "Conhecimentos de transporte Rodoviário de Cargas (código 08), " + "Conhecimentos de Transporte de Cargas Avulso (código 8b), Aquaviário de " + "Cargas (código 09), Aéreo (código 10), Ferroviário de Cargas (código 11), " + "Multimodal de Cargas (código 26), Nota Fiscal de Transporte ferroviário de" + " carga (código 27), conhecimento de transporte eletrônico – ct-e (código " + "57) e conhecimento de transporte eletrônico para outros serviços - ct-e os" + " (código 67) e bilhete de passagem eletrônico (código 63)." + ), + ) + + reg_D120_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d120", + "reg_D120_ids_RegistroD110_id", + string="D120 Complemento da Nota Fiscal de Serviços", + sped_card="1:N", + help="D120 Complemento da Nota Fiscal de Serviços de Transporte (código 07)", + ) + + +class RegistroD120(models.AbstractModel): + "Complemento da Nota Fiscal de Serviços de Transporte (código 07)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d120" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_MUN_ORIG = fields.Char( + string="Código do município de origem do serviço", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de origem do serviço, conforme a tabela IBGE", + ) + + COD_MUN_DEST = fields.Char( + string="Código do município de destino", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de destino, conforme a tabela IBGE", + ) + + VEIC_ID = fields.Char(string="Placa de identificação do veículo", sped_length="7") + + UF_ID = fields.Char(string="Sigla da UF da placa do veículo", sped_length="2") + + reg_D120_ids_RegistroD110_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d110", + string="Itens do documento", + required=True, + ondelete="cascade", + help=("Itens do documento - Nota Fiscal de Serviços de Transporte (código 07)"), + ) + + +class RegistroD130(models.AbstractModel): + """Complemento do Conhecimento Rodoviário de Cargas (código 08), do + Conhecimento Rodoviário de Cargas Avulso (código 8B) e do Conhecimento + de Transporte Eletrônico Simplificado (código 57)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d130" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_PART_CONSG = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - consignatário, se " + "houver" + ), + ) + + COD_PART_RED = fields.Char( + string="Código do participante (COD_PART_RED)", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - redespachado, se " + "houver" + ), + ) + + IND_FRT_RED = fields.Char( + string="Indicador do tipo do frete da operação", + sped_length="1*", + help=( + "Indicador do tipo do frete da operação de redespacho: 0 - Sem redespacho; " + "1 - Por conta do emitente 2 - Por conta do destinatário 9 - Outros." + ), + ) + + COD_MUN_ORIG = fields.Char( + string="Código do município de origem do serviço", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de origem do serviço, conforme a tabela IBGE", + ) + + COD_MUN_DEST = fields.Char( + string="Código do município de destino", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de destino, conforme a tabela IBGE", + ) + + VEIC_ID = fields.Char(string="Placa de identificação do veículo", sped_length="7") + + VL_LIQ_FRT = fields.Monetary( + string="Valor líquido do frete", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SEC_CAT = fields.Monetary( + string="Soma de valores de Sec/Cat", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Soma de valores de Sec/Cat (serviços de coleta/custo adicional de " + "transporte)" + ), + ) + + VL_DESP = fields.Monetary( + string="Soma de valores de despacho", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PEDG = fields.Monetary( + string="Soma dos valores de pedágio", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUT = fields.Monetary( + string="Outros valores", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_FRT = fields.Monetary( + string="Valor total do frete", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + UF_ID = fields.Char(string="Sigla da UF da placa do veículo", sped_length="2") + + reg_D130_ids_RegistroD100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d100", + string="Registro D100- Nota Fiscal de Serviço", + required=True, + ondelete="cascade", + help=( + "Registro D100- Nota Fiscal de Serviço de Transporte (código 07) e " + "Conhecimentos de transporte Rodoviário de Cargas (código 08), " + "Conhecimentos de Transporte de Cargas Avulso (código 8b), Aquaviário de " + "Cargas (código 09), Aéreo (código 10), Ferroviário de Cargas (código 11), " + "Multimodal de Cargas (código 26), Nota Fiscal de Transporte ferroviário de" + " carga (código 27), conhecimento de transporte eletrônico – ct-e (código " + "57) e conhecimento de transporte eletrônico para outros serviços - ct-e os" + " (código 67) e bilhete de passagem eletrônico (código 63)." + ), + ) + + +class RegistroD140(models.AbstractModel): + "Complemento do Conhecimento Aquaviário de Cargas (código 09)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d140" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_PART_CONSG = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - consignatário, se " + "houver" + ), + ) + + COD_MUN_ORIG = fields.Char( + string="Código do município de origem do serviço", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de origem do serviço, conforme a tabela IBGE", + ) + + COD_MUN_DEST = fields.Char( + string="Código do município de destino", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de destino, conforme a tabela IBGE", + ) + + IND_VEIC = fields.Char( + string="Indicador do tipo do veículo transportador", + sped_length="1*", + help=( + "Indicador do tipo do veículo transportador: 0 - Embarcação 1 - " + "Empurrador/rebocador" + ), + ) + + VEIC_ID = fields.Char( + string="Identificação da embarcação", + help="Identificação da embarcação (IRIM ou Registro CPP)", + ) + + IND_NAV = fields.Char(string="Indicador do tipo da navegação", sped_length="1*") + + VIAGEM = fields.Integer(string="Número da viagem") + + VL_FRT_LIQ = fields.Monetary( + string="Valor líquido do frete", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESP_PORT = fields.Monetary( + string="Valor das despesas portuárias", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESP_CAR_DESC = fields.Monetary( + string="Valor das despesas com carga e descarga", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUT = fields.Monetary( + string="Outros valores", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_FRT_BRT = fields.Monetary( + string="Valor bruto do frete", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_FRT_MM = fields.Monetary( + string="Valor adicional do frete para renovação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor adicional do frete para renovação da Marinha Mercante", + ) + + reg_D140_ids_RegistroD100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d100", + string="Registro D100- Nota Fiscal de Serviço", + required=True, + ondelete="cascade", + help=( + "Registro D100- Nota Fiscal de Serviço de Transporte (código 07) e " + "Conhecimentos de transporte Rodoviário de Cargas (código 08), " + "Conhecimentos de Transporte de Cargas Avulso (código 8b), Aquaviário de " + "Cargas (código 09), Aéreo (código 10), Ferroviário de Cargas (código 11), " + "Multimodal de Cargas (código 26), Nota Fiscal de Transporte ferroviário de" + " carga (código 27), conhecimento de transporte eletrônico – ct-e (código " + "57) e conhecimento de transporte eletrônico para outros serviços - ct-e os" + " (código 67) e bilhete de passagem eletrônico (código 63)." + ), + ) + + +class RegistroD150(models.AbstractModel): + "Complemento do Conhecimento Aéreo de Cargas (código 10)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d150" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_MUN_ORIG = fields.Char( + string="Código do município de origem do serviço", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de origem do serviço, conforme a tabela IBGE", + ) + + COD_MUN_DEST = fields.Char( + string="Código do município de destino", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de destino, conforme a tabela IBGE", + ) + + VEIC_ID = fields.Char(string="Identificação da aeronave (DAC)") + + VIAGEM = fields.Integer(string="Número do vôo") + + IND_TFA = fields.Char( + string="Indicador do tipo de tarifa aplicada", + sped_length="1*", + help=("Indicador do tipo de tarifa aplicada: 0- Exp. 1- Enc. 2- C.I. 9- Outra"), + ) + + VL_PESO_TX = fields.Monetary( + string="Peso taxado", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_TX_TERR = fields.Monetary( + string="Valor da taxa terrestre", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_TX_RED = fields.Monetary( + string="Valor da taxa de redespacho", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUT = fields.Monetary( + string="Outros valores", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_TX_ADV = fields.Monetary( + string="Valor da taxa 'ad valorem'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_D150_ids_RegistroD100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d100", + string="Registro D100- Nota Fiscal de Serviço", + required=True, + ondelete="cascade", + help=( + "Registro D100- Nota Fiscal de Serviço de Transporte (código 07) e " + "Conhecimentos de transporte Rodoviário de Cargas (código 08), " + "Conhecimentos de Transporte de Cargas Avulso (código 8b), Aquaviário de " + "Cargas (código 09), Aéreo (código 10), Ferroviário de Cargas (código 11), " + "Multimodal de Cargas (código 26), Nota Fiscal de Transporte ferroviário de" + " carga (código 27), conhecimento de transporte eletrônico – ct-e (código " + "57) e conhecimento de transporte eletrônico para outros serviços - ct-e os" + " (código 67) e bilhete de passagem eletrônico (código 63)." + ), + ) + + +class RegistroD160(models.AbstractModel): + "Carga Transportada (CÓDIGO 08, 8B, 09, 10, 11, 26 E 27)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d160" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DESPACHO = fields.Char(string="Identificação do número do despacho") + + CNPJ_CPF_REM = fields.Char( + string="CNPJ ou CPF do remetente das mercadorias", + xsd_type="numeric_code", + sped_length="14", + help="CNPJ ou CPF do remetente das mercadorias que constam na nota fiscal", + ) + + IE_REM = fields.Char( + string="Inscrição Estadual do remetente das mercadorias", + sped_length="14", + help=( + "Inscrição Estadual do remetente das mercadorias que constam na nota fiscal" + ), + ) + + COD_MUN_ORI = fields.Char( + string="Código do Município de origem", + xsd_type="numeric_code", + sped_length="7*", + help="Código do Município de origem, conforme tabela IBGE", + ) + + CNPJ_CPF_DEST = fields.Char( + string="CNPJ ou CPF do destinatário das mercadorias", + xsd_type="numeric_code", + sped_length="14", + help=("CNPJ ou CPF do destinatário das mercadorias que constam na nota fiscal"), + ) + + IE_DEST = fields.Char( + string="Inscrição Estadual do destinatário das mercadorias", + sped_length="14", + help=( + "Inscrição Estadual do destinatário das mercadorias que constam na nota " + "fiscal." + ), + ) + + COD_MUN_DEST = fields.Char( + string="Código do Município de destino", + xsd_type="numeric_code", + sped_length="7*", + help="Código do Município de destino, conforme tabela IBGE", + ) + + reg_D160_ids_RegistroD100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d100", + string="Registro D100- Nota Fiscal de Serviço", + required=True, + ondelete="cascade", + help=( + "Registro D100- Nota Fiscal de Serviço de Transporte (código 07) e " + "Conhecimentos de transporte Rodoviário de Cargas (código 08), " + "Conhecimentos de Transporte de Cargas Avulso (código 8b), Aquaviário de " + "Cargas (código 09), Aéreo (código 10), Ferroviário de Cargas (código 11), " + "Multimodal de Cargas (código 26), Nota Fiscal de Transporte ferroviário de" + " carga (código 27), conhecimento de transporte eletrônico – ct-e (código " + "57) e conhecimento de transporte eletrônico para outros serviços - ct-e os" + " (código 67) e bilhete de passagem eletrônico (código 63)." + ), + ) + + reg_D161_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d161", + "reg_D161_ids_RegistroD160_id", + string="D161 Local de Coleta e Entrega", + sped_card="1:1", + help="D161 Local de Coleta e Entrega (códigos 08, 8B, 09, 10, 11 e 26)", + ) + + reg_D162_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d162", + "reg_D162_ids_RegistroD160_id", + string="D162 Identificação dos documentos fiscais", + sped_card="1:N", + help=( + "D162 Identificação dos documentos fiscais (código 08,8B, 09,10,11,26 e 27)" + ), + ) + + +class RegistroD161(models.AbstractModel): + "Local de Coleta e Entrega (códigos 08, 8B, 09, 10, 11 e 26)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d161" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + IND_CARGA = fields.Char( + string="Indicador do tipo de transporte da carga coletada", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Indicador do tipo de transporte da carga coletada: 0 - Rodoviário 1 - " + "Ferroviário 2 - Rodo-Ferroviário 3 - Aquaviário 4 - Dutoviário 5 - Aéreo 9" + " – Outros" + ), + ) + + CNPJ_CPF_COL = fields.Char( + string="Número do CNPJ ou CPF do local da coleta", sped_length="14" + ) + + IE_COL = fields.Char( + string="Inscrição Estadual do contribuinte do local", + sped_length="14", + help="Inscrição Estadual do contribuinte do local de coleta", + ) + + COD_MUN_COL = fields.Char( + string="Código do Município do local de coleta", + xsd_type="numeric_code", + sped_length="7*", + help="Código do Município do local de coleta, conforme tabela IBGE", + ) + + CNPJ_CPF_ENTG = fields.Char( + string="Número do CNPJ ou CPF do local da entrega", sped_length="14" + ) + + IE_ENTG = fields.Char( + string="IE_ENTG", + sped_length="14", + help="Inscrição Estadual do contribuinte do local de entrega", + ) + + COD_MUN_ENTG = fields.Char( + string="Código do Município do local de entrega", + xsd_type="numeric_code", + sped_length="7*", + help="Código do Município do local de entrega, conforme tabela IBGE", + ) + + reg_D161_ids_RegistroD160_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d160", + string="Carga Transportada", + required=True, + ondelete="cascade", + help="Carga Transportada (CÓDIGO 08, 8B, 09, 10, 11, 26 E 27)", + ) + + +class RegistroD162(models.AbstractModel): + """Identificação dos documentos fiscais (código 08,8B, 09,10,11,26 e 27)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d162" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + VL_DOC = fields.Monetary( + string="Valor total do documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_MERC = fields.Monetary( + string="Valor das mercadorias constantes", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor das mercadorias constantes no documento fiscal", + ) + + QTD_VOL = fields.Integer(string="Quantidade de volumes transportados") + + PESO_BRT = fields.Float( + string="Peso bruto dos volumes transportados", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Peso bruto dos volumes transportados (em kg)", + ) + + PESO_LIQ = fields.Float( + string="Peso líquido dos volumes transportados", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Peso líquido dos volumes transportados (em kg)", + ) + + reg_D162_ids_RegistroD160_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d160", + string="Carga Transportada", + required=True, + ondelete="cascade", + help="Carga Transportada (CÓDIGO 08, 8B, 09, 10, 11, 26 E 27)", + ) + + +class RegistroD170(models.AbstractModel): + "Complemento do Conhecimento Multimodal de Cargas (código 26)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d170" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_PART_CONSG = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - consignatário, se " + "houver" + ), + ) + + COD_PART_RED = fields.Char( + string="Código do participante (COD_PART_RED)", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - redespachante, se " + "houver" + ), + ) + + COD_MUN_ORIG = fields.Char( + string="Código do município de origem do serviço", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de origem do serviço, conforme a tabela IBGE", + ) + + COD_MUN_DEST = fields.Char( + string="Código do município de destino", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de destino, conforme a tabela IBGE", + ) + + OTM = fields.Char(string="Registro do operador de transporte multimodal") + + IND_NAT_FRT = fields.Char( + string="Indicador da natureza do frete", + sped_length="1*", + help="Indicador da natureza do frete: 0- Negociável", + ) + + VL_LIQ_FRT = fields.Monetary( + string="Valor líquido do frete", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_GRIS = fields.Monetary( + string="Valor do gris", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor do gris (gerenciamento de risco)", + ) + + VL_PDG = fields.Monetary( + string="Somatório dos valores de pedágio", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUT = fields.Monetary( + string="Outros valores", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_FRT = fields.Monetary( + string="Valor total do frete", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VEIC_ID = fields.Char(string="Placa de identificação do veículo", sped_length="7") + + UF_ID = fields.Char(string="Sigla da UF da placa do veículo", sped_length="2") + + reg_D170_ids_RegistroD100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d100", + string="Registro D100- Nota Fiscal de Serviço", + required=True, + ondelete="cascade", + help=( + "Registro D100- Nota Fiscal de Serviço de Transporte (código 07) e " + "Conhecimentos de transporte Rodoviário de Cargas (código 08), " + "Conhecimentos de Transporte de Cargas Avulso (código 8b), Aquaviário de " + "Cargas (código 09), Aéreo (código 10), Ferroviário de Cargas (código 11), " + "Multimodal de Cargas (código 26), Nota Fiscal de Transporte ferroviário de" + " carga (código 27), conhecimento de transporte eletrônico – ct-e (código " + "57) e conhecimento de transporte eletrônico para outros serviços - ct-e os" + " (código 67) e bilhete de passagem eletrônico (código 63)." + ), + ) + + +class RegistroD180(models.AbstractModel): + "Modais (código 26)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d180" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_SEQ = fields.Integer(string="Número de ordem sequencial do modal") + + IND_EMIT = fields.Char( + string="Indicador do emitente do documento fiscal", + sped_length="1*", + help=( + "Indicador do emitente do documento fiscal: 0 - Emissão própria 1 – " + "Terceiros" + ), + ) + + CNPJ_CPF_EMIT = fields.Char( + string="CNPJ ou CPF do participante emitente do modal", + xsd_type="numeric_code", + sped_length="14", + ) + + UF_EMIT = fields.Char( + string="Sigla da unidade da federação", + sped_length="2*", + help="Sigla da unidade da federação do participante emitente do modal", + ) + + IE_EMIT = fields.Char( + string="Inscrição Estadual do participante emitente", + sped_length="14", + help="Inscrição Estadual do participante emitente do modal", + ) + + COD_MUN_ORIG = fields.Char( + string="Código do município de origem do serviço", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de origem do serviço, conforme a tabela IBGE", + ) + + CNPJ_CPF_TOM = fields.Char( + string="CNPJ/CPF do participante tomador do serviço", + xsd_type="numeric_code", + sped_length="14", + ) + + UF_TOM = fields.Char( + string="Sigla da unidade da federação (UF_TOM)", + sped_length="2*", + help="Sigla da unidade da federação do participante tomador do serviço", + ) + + IE_TOM = fields.Char( + string="Inscrição Estadual do participante tomador", + sped_length="14", + help="Inscrição Estadual do participante tomador do serviço", + ) + + COD_MUN_DEST = fields.Char( + string="Código do município de destino", + xsd_type="numeric_code", + sped_length="7*", + help=( + "Código do município de destino, conforme a tabela IBGE(Preencher com " + "9999999, se Exterior)" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + VL_DOC = fields.Monetary( + string="Valor total do documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_D180_ids_RegistroD100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d100", + string="Registro D100- Nota Fiscal de Serviço", + required=True, + ondelete="cascade", + help=( + "Registro D100- Nota Fiscal de Serviço de Transporte (código 07) e " + "Conhecimentos de transporte Rodoviário de Cargas (código 08), " + "Conhecimentos de Transporte de Cargas Avulso (código 8b), Aquaviário de " + "Cargas (código 09), Aéreo (código 10), Ferroviário de Cargas (código 11), " + "Multimodal de Cargas (código 26), Nota Fiscal de Transporte ferroviário de" + " carga (código 27), conhecimento de transporte eletrônico – ct-e (código " + "57) e conhecimento de transporte eletrônico para outros serviços - ct-e os" + " (código 67) e bilhete de passagem eletrônico (código 63)." + ), + ) + + +class RegistroD190(models.AbstractModel): + """Registro Analítico dos Documentos (CÓDIGO 07, 08, 8B, 09, 10, 11, 26, + 27, 57, 63 e 67)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d190" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código Fiscal de Operação e Prestação, conforme a tabela indicada no item " + "4.2.2" + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da operação correspondente à combinação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da operação correspondente à combinação de CST_ICMS, CFOP e alíquota" + " do ICMS" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ICMS' referente à " + "combinação CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ICMS' referente à combinação CST_ICMS," + " CFOP e alíquota do ICMS" + ), + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_D190_ids_RegistroD100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d100", + string="Registro D100- Nota Fiscal de Serviço", + required=True, + ondelete="cascade", + help=( + "Registro D100- Nota Fiscal de Serviço de Transporte (código 07) e " + "Conhecimentos de transporte Rodoviário de Cargas (código 08), " + "Conhecimentos de Transporte de Cargas Avulso (código 8b), Aquaviário de " + "Cargas (código 09), Aéreo (código 10), Ferroviário de Cargas (código 11), " + "Multimodal de Cargas (código 26), Nota Fiscal de Transporte ferroviário de" + " carga (código 27), conhecimento de transporte eletrônico – ct-e (código " + "57) e conhecimento de transporte eletrônico para outros serviços - ct-e os" + " (código 67) e bilhete de passagem eletrônico (código 63)." + ), + ) + + +class RegistroD195(models.AbstractModel): + "Observações do lançamento fiscal" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d195" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar do código de observação") + + reg_D195_ids_RegistroD100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d100", + string="Registro D100- Nota Fiscal de Serviço", + required=True, + ondelete="cascade", + help=( + "Registro D100- Nota Fiscal de Serviço de Transporte (código 07) e " + "Conhecimentos de transporte Rodoviário de Cargas (código 08), " + "Conhecimentos de Transporte de Cargas Avulso (código 8b), Aquaviário de " + "Cargas (código 09), Aéreo (código 10), Ferroviário de Cargas (código 11), " + "Multimodal de Cargas (código 26), Nota Fiscal de Transporte ferroviário de" + " carga (código 27), conhecimento de transporte eletrônico – ct-e (código " + "57) e conhecimento de transporte eletrônico para outros serviços - ct-e os" + " (código 67) e bilhete de passagem eletrônico (código 63)." + ), + ) + + reg_D197_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d197", + "reg_D197_ids_RegistroD195_id", + string="D197 Outras obrigações tributárias", + sped_card="1:N", + help=( + "D197 Outras obrigações tributárias, ajustes e informações de valores " + "provenientes do documento fiscal." + ), + ) + + +class RegistroD197(models.AbstractModel): + """Outras obrigações tributárias, ajustes e informações de valores + provenientes do documento fiscal.""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d197" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_AJ = fields.Char( + string="Código do ajustes/benefício/incentivo", + sped_length="1*", + help=( + "Código do ajustes/benefício/incentivo, conforme tabela indicada no item " + "5.3" + ), + ) + + DESCR_COMPL_AJ = fields.Char( + string="Descrição complementar do ajuste", + help="Descrição complementar do ajuste do documento fiscal", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_BC_ICMS = fields.Monetary( + string="Base de cálculo do ICMS ou do ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS ou do ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUTROS = fields.Monetary( + string="Outros valores", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + reg_D197_ids_RegistroD195_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d195", + string="Observações do lançamento fiscal", + required=True, + ondelete="cascade", + ) + + +class RegistroD300(models.AbstractModel): + """Registro Analítico dos bilhetes consolidados de Passagem Rodoviário + (código 13), de Passagem Aquaviário (código 14), de Passagem e""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d300" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="4" + ) + + NUM_DOC_INI = fields.Char( + string="Número do primeiro documento fiscal emitido", + xsd_type="numeric_code", + sped_length="6", + help=( + "Número do primeiro documento fiscal emitido (mesmo modelo, série e " + "subsérie)" + ), + ) + + NUM_DOC_FIN = fields.Integer( + string="Número do último documento fiscal emitido", + help=( + "Número do último documento fiscal emitido (mesmo modelo, série e subsérie)" + ), + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código Fiscal de Operação e Prestação conforme tabela indicada no item " + "4.2.2" + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + DT_DOC = fields.Date( + string="Data da emissão dos documentos fiscais", sped_length="8*" + ) + + VL_OPR = fields.Monetary( + string="Valor total acumulado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total acumulado das operações correspondentes à combinação de " + "CST_ICMS, CFOP e alíquota do ICMS, incluídas as despesas acessórias e " + "acréscimos" + ), + ) + + VL_DESC = fields.Monetary( + string="Valor total dos descontos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV = fields.Monetary( + string="Valor total da prestação de serviço", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SEG = fields.Monetary( + string="Valor de seguro", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_OUTDESP = fields.Monetary( + string="Valor de outras despesas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor total da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor total do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + reg_D301_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d301", + "reg_D301_ids_RegistroD300_id", + string="D301 Documentos cancelados dos Bilhetes", + sped_card="1:N", + help=( + "D301 Documentos cancelados dos Bilhetes de Passagem Rodoviário (código " + "13), de Passagem Aquaviário (código 14), de Passagem e Nota de Bagagem " + "(código 15) e de Passagem Ferroviário (código 16)" + ), + ) + + reg_D310_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d310", + "reg_D310_ids_RegistroD300_id", + string="D310 Complemento dos Bilhetes", + sped_card="1:N", + help=( + "D310 Complemento dos Bilhetes (código 13, código 14, código 15 e código " + "16)" + ), + ) + + +class RegistroD301(models.AbstractModel): + """Documentos cancelados dos Bilhetes de Passagem Rodoviário (código 13), + de Passagem Aquaviário (código 14), de Passagem e Nota de Bagagem + (código 15) e de Passagem Ferroviário (código 16)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d301" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_DOC_CANC = fields.Integer(string="Número do documento fiscal cancelado") + + reg_D301_ids_RegistroD300_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d300", + string="Registro Analítico dos bilhetes consolidados", + required=True, + ondelete="cascade", + help=( + "Registro Analítico dos bilhetes consolidados de Passagem Rodoviário " + "(código 13), de Passagem Aquaviário (código 14), de Passagem e" + ), + ) + + +class RegistroD310(models.AbstractModel): + """Complemento dos Bilhetes (código 13, código 14, código 15 e código + 16)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d310" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_MUN_ORIG = fields.Char( + string="Código do município de origem do serviço", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de origem do serviço, conforme a tabela IBGE", + ) + + VL_SERV = fields.Monetary( + string="Valor total da prestação de serviço", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor total da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor total do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_D310_ids_RegistroD300_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d300", + string="Registro Analítico dos bilhetes consolidados", + required=True, + ondelete="cascade", + help=( + "Registro Analítico dos bilhetes consolidados de Passagem Rodoviário " + "(código 13), de Passagem Aquaviário (código 14), de Passagem e" + ), + ) + + +class RegistroD350(models.AbstractModel): + "Equipamento ECF (Códigos 2E, 13, 14, 15 e 16)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d350" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + ECF_MOD = fields.Char(string="Modelo do equipamento", sped_length="2") + + ECF_FAB = fields.Char( + string="Número de série de fabricação do ECF", sped_length="21" + ) + + ECF_CX = fields.Char( + string="Número do caixa atribuído ao ECF", + xsd_type="numeric_code", + sped_length="3", + ) + + reg_D355_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d355", + "reg_D355_ids_RegistroD350_id", + string="D355 Redução Z", + sped_card="1:N", + help="D355 Redução Z (Códigos 2E, 13, 14, 15 e 16)", + ) + + +class RegistroD355(models.AbstractModel): + "Redução Z (Códigos 2E, 13, 14, 15 e 16)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d355" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_DOC = fields.Date( + string="Data do movimento a que se refere a Redução Z", sped_length="8*" + ) + + CRO = fields.Char( + string="Posição do Contador de Reinício de Operação", + xsd_type="numeric_code", + sped_length="3", + ) + + CRZ = fields.Char( + string="Posição do Contador de Redução Z", + xsd_type="numeric_code", + sped_length="6", + ) + + NUM_COO_FIN = fields.Char( + string="Número do Contador de Ordem de Operação", + xsd_type="numeric_code", + sped_length="9", + help=( + "Número do Contador de Ordem de Operação do último documento emitido no " + "dia. (Número do COO na Redução Z)" + ), + ) + + GT_FIN = fields.Float( + string="Valor do Grande Total final", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_BRT = fields.Monetary( + string="Valor da venda bruta", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_D355_ids_RegistroD350_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d350", + string="Equipamento ECF", + required=True, + ondelete="cascade", + help="Equipamento ECF (Códigos 2E, 13, 14, 15 e 16)", + ) + + reg_D360_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d360", + "reg_D360_ids_RegistroD355_id", + string="D360 PIS E COFINS totalizados no dia", + sped_card="1:1", + help="D360 PIS E COFINS totalizados no dia (Códigos 2E, 13, 14, 15 e 16)", + ) + + reg_D365_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d365", + "reg_D365_ids_RegistroD355_id", + string="D365 Registro dos Totalizadores Parciais", + sped_card="1:N", + help=( + "D365 Registro dos Totalizadores Parciais da Redução Z (Códigos 2E, 13, 14," + " 15 e 16)" + ), + ) + + reg_D390_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d390", + "reg_D390_ids_RegistroD355_id", + string="D390 Registro analítico do movimento diário", + sped_card="1:N", + help=( + "D390 Registro analítico do movimento diário (Códigos 13, 14, 15, 16 E 2E)" + ), + ) + + +class RegistroD360(models.AbstractModel): + "PIS E COFINS totalizados no dia (Códigos 2E, 13, 14, 15 e 16)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d360" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + VL_PIS = fields.Monetary( + string="Valor total do PIS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_COFINS = fields.Monetary( + string="Valor total da COFINS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_D360_ids_RegistroD355_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d355", + string="Redução Z", + required=True, + ondelete="cascade", + help="Redução Z (Códigos 2E, 13, 14, 15 e 16)", + ) + + +class RegistroD365(models.AbstractModel): + """Registro dos Totalizadores Parciais da Redução Z (Códigos 2E, 13, 14, 15 + e 16)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d365" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_TOT_PAR = fields.Char( + string="Código do totalizador", + sped_length="7", + help="Código do totalizador, conforme tabela 4.4.6", + ) + + VLR_ACUM_TOT = fields.Float( + string="Valor acumulado no totalizador", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Valor acumulado no totalizador, relativo à respectiva Redução Z", + ) + + NR_TOT = fields.Char( + string="Número do totalizador quando ocorrer", + xsd_type="numeric_code", + sped_length="2", + help=( + "Número do totalizador quando ocorrer mais de uma situação com a mesma " + "carga tributária efetiva" + ), + ) + + DESCR_NR_TOT = fields.Char( + string="Descrição da situação tributária relativa", + help=( + "Descrição da situação tributária relativa ao totalizador parcial, quando " + "houver mais de um com a mesma carga tributária efetiva" + ), + ) + + reg_D365_ids_RegistroD355_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d355", + string="Redução Z", + required=True, + ondelete="cascade", + help="Redução Z (Códigos 2E, 13, 14, 15 e 16)", + ) + + reg_D370_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d370", + "reg_D370_ids_RegistroD365_id", + string="D370 Complemento dos documentos informados", + sped_card="1:N", + help=( + "D370 Complemento dos documentos informados (Códigos 13, 14, 15, 16 E 2E)" + ), + ) + + +class RegistroD370(models.AbstractModel): + "Complemento dos documentos informados (Códigos 13, 14, 15, 16 E 2E)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d370" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + COD_MUN_ORIG = fields.Char( + string="Código do município de origem do serviço", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de origem do serviço, conforme a tabela IBGE", + ) + + VL_SERV = fields.Monetary( + string="Valor total da prestação de serviço", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + QTD_BILH = fields.Integer(string="Quantidade de bilhetes emitidos") + + VL_BC_ICMS = fields.Monetary( + string="Valor total da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor total do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_D370_ids_RegistroD365_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d365", + string="Registro dos Totalizadores Parciais da Redução Z", + required=True, + ondelete="cascade", + help=( + "Registro dos Totalizadores Parciais da Redução Z (Códigos 2E, 13, 14, 15 e" + " 16)" + ), + ) + + +class RegistroD390(models.AbstractModel): + """Registro analítico do movimento diário (Códigos 13, 14, 15, 16 E 2E)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d390" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da operação correspondente à combinação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da operação correspondente à combinação de CST_ICMS, CFOP e alíquota" + " do ICMS, incluídas as despesas acessórias e acréscimos" + ), + ) + + VL_BC_ISSQN = fields.Monetary( + string="Valor da base de cálculo do ISSQN", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ISSQN = fields.Float( + string="Alíquota do ISSQN", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ISSQN = fields.Monetary( + string="Valor do ISSQN", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_BC_ICMS = fields.Monetary( + string="Base de cálculo do ICMS acumulada relativa", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Base de cálculo do ICMS acumulada relativa à alíquota informada", + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS acumulado relativo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor do ICMS acumulado relativo à alíquota informada", + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_D390_ids_RegistroD355_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d355", + string="Redução Z", + required=True, + ondelete="cascade", + help="Redução Z (Códigos 2E, 13, 14, 15 e 16)", + ) + + +class RegistroD400(models.AbstractModel): + "Resumo do Movimento Diário (código 18)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d400" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - agência, filial ou " + "posto" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + COD_SIT = fields.Char( + string="Código da situação do documento fiscal", + xsd_type="numeric_code", + sped_length="2*", + help="Código da situação do documento fiscal, conforme a tabela 4.1.2", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal resumo", + xsd_type="numeric_code", + sped_length="6", + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + VL_DOC = fields.Monetary( + string="Valor total do documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor acumulado dos descontos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV = fields.Monetary( + string="Valor acumulado da prestação de serviço", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor total da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor total do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + reg_D410_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d410", + "reg_D410_ids_RegistroD400_id", + string="D410 Documentos Informados", + sped_card="1:N", + help="D410 Documentos Informados (Códigos 13, 14, 15 e 16)", + ) + + reg_D420_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d420", + "reg_D420_ids_RegistroD400_id", + string="D420 Complemento dos Documentos Informados", + sped_card="1:N", + help="D420 Complemento dos Documentos Informados (Códigos", + ) + + +class RegistroD410(models.AbstractModel): + "Documentos Informados (Códigos 13, 14, 15 e 16)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d410" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal ", + sped_length="2*", + help="Código do modelo do documento fiscal , conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + NUM_DOC_INI = fields.Char( + string="Número do documento fiscal inicial", + xsd_type="numeric_code", + sped_length="6", + help="Número do documento fiscal inicial (mesmo modelo, série e subsérie)", + ) + + NUM_DOC_FIN = fields.Integer( + string="Número do documento fiscal final", + help="Número do documento fiscal final(mesmo modelo, série e subsérie)", + ) + + DT_DOC = fields.Date( + string="Data da emissão dos documentos fiscais", sped_length="8*" + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor total acumulado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total acumulado das operações correspondentes à combinação de " + "CST_ICMS, CFOP e alíquota do ICMS, incluídas as despesas acessórias e " + "acréscimos" + ), + ) + + VL_DESC = fields.Monetary( + string="Valor acumulado dos descontos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV = fields.Monetary( + string="Valor acumulado da prestação de serviço", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_D410_ids_RegistroD400_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d400", + string="Resumo do Movimento Diário", + required=True, + ondelete="cascade", + help="Resumo do Movimento Diário (código 18)", + ) + + reg_D411_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d411", + "reg_D411_ids_RegistroD410_id", + string="D411 Documentos Cancelados", + sped_card="1:N", + help=( + "D411 Documentos Cancelados dos Documentos Informados (Códigos 13, 14, 15 e" + " 16)" + ), + ) + + +class RegistroD411(models.AbstractModel): + """Documentos Cancelados dos Documentos Informados (Códigos 13, 14, 15 e + 16)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d411" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + NUM_DOC_CANC = fields.Integer(string="Número do documento fiscal cancelado") + + reg_D411_ids_RegistroD410_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d410", + string="Documentos Informados", + required=True, + ondelete="cascade", + help="Documentos Informados (Códigos 13, 14, 15 e 16)", + ) + + +class RegistroD420(models.AbstractModel): + "Complemento dos Documentos Informados (Códigos" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d420" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_MUN_ORIG = fields.Char( + string="Código do município de origem do serviço", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município de origem do serviço, conforme a tabela IBGE", + ) + + VL_SERV = fields.Monetary( + string="Valor total da prestação de serviço", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor total da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor total do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_D420_ids_RegistroD400_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d400", + string="Resumo do Movimento Diário", + required=True, + ondelete="cascade", + help="Resumo do Movimento Diário (código 18)", + ) + + +class RegistroD500(models.AbstractModel): + """Nota Fiscal de Serviço de Comunicação (código 21) e Serviço de + Telecomunicação (código 22)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d500" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_OPER = fields.Char( + string="Indicador do tipo de operação", + sped_length="1*", + help="Indicador do tipo de operação: 0 - Aquisição 1 – Prestação", + ) + + IND_EMIT = fields.Char( + string="Indicador do emitente do documento fiscal", + sped_length="1*", + help=( + "Indicador do emitente do documento fiscal: 0 - Emissão própria; 1 – " + "Terceiros" + ), + ) + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - do prestador do " + "serviço, no caso de aquisição" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + COD_SIT = fields.Char( + string="Código da situação do documento fiscal", + xsd_type="numeric_code", + sped_length="2*", + help="Código da situação do documento fiscal, conforme a tabela 4.1.2", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char(string="Subsérie do documento fiscal", sped_length="3") + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + DT_A_P = fields.Date( + string="Data da entrada", + sped_length="8*", + help="Data da entrada (aquisição) ou da saída (prestação do serviço)", + ) + + VL_DOC = fields.Monetary( + string="Valor total do documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor total do desconto", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV = fields.Monetary( + string="Valor da prestação de serviços", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV_NT = fields.Monetary( + string="Valor total dos serviços não-tributados pelo ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_TERC = fields.Monetary( + string="Valores cobrados em nome de terceiros", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DA = fields.Monetary( + string="Valor de outras despesas indicadas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor de outras despesas indicadas no documento fiscal", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + COD_INF = fields.Char( + string="Código da informação complementar", + sped_length="6", + help="Código da informação complementar (campo 02 do Registro 0450)", + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + TP_ASSINANTE = fields.Char( + string="Código do Tipo de Assinante", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Código do Tipo de Assinante: 1 - Comercial/Industrial 2 - Poder Público 3 " + "- Residencial/Pessoa física 4 - Público 5 - Semi-Público 6 – Outros" + ), + ) + + reg_D510_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d510", + "reg_D510_ids_RegistroD500_id", + string="D510 Itens do Documento – Nota Fiscal de Serviço", + sped_card="1:N", + help=( + "D510 Itens do Documento – Nota Fiscal de Serviço de Comunicação (código " + "21) e Serviço de Telecomunicação (código 22)" + ), + ) + + reg_D530_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d530", + "reg_D530_ids_RegistroD500_id", + string="D530 Terminal Faturado", + sped_card="1:N", + ) + + reg_D590_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d590", + "reg_D590_ids_RegistroD500_id", + string="D590 Registro Analítico do Documento", + sped_card="1:N", + help="D590 Registro Analítico do Documento (códigos 21 e 22)", + ) + + +class RegistroD510(models.AbstractModel): + """Itens do Documento – Nota Fiscal de Serviço de Comunicação (código 21) e + Serviço de Telecomunicação (código 22)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d510" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_ITEM = fields.Char( + string="Número sequencial do item no documento fiscal", + xsd_type="numeric_code", + sped_length="3", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + COD_CLASS = fields.Char( + string="Código de classificação do item do serviço", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código de classificação do item do serviço de comunicação ou de " + "telecomunicação, conforme a tabela 4.4.1" + ), + ) + + QTD = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor do item", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_DESC = fields.Monetary( + string="Valor total do desconto", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS creditado/debitado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS_UF = fields.Monetary( + string="Valor da base de cálculo do ICMS a outras UFs", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS_UF = fields.Monetary( + string="Valor do ICMS a outras UFs", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + IND_REC = fields.Char( + string="Indicador do tipo de receita", + sped_length="1*", + help=( + "Indicador do tipo de receita: 0 - Receita própria - serviços prestados 1 -" + " Receita própria - cobrança de débitos 2 - Receita própria - venda de " + "mercadorias 3 - Receita própria - venda de serviço pré-pago 4 - Outras " + "receitas próprias 5 - Receitas de terceiros (co-faturamento) 9 - Outras " + "receitas de terceiros" + ), + ) + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150) receptor da receita, " + "terceiro da operação, se houver" + ), + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + reg_D510_ids_RegistroD500_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d500", + string="Nota Fiscal de Serviço de Comunicação", + required=True, + ondelete="cascade", + help=( + "Nota Fiscal de Serviço de Comunicação (código 21) e Serviço de " + "Telecomunicação (código 22)" + ), + ) + + +class RegistroD530(models.AbstractModel): + "Terminal Faturado" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d530" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + IND_SERV = fields.Char( + string="Indicador do tipo de serviço prestado", + sped_length="1*", + help=( + "Indicador do tipo de serviço prestado: 0- Telefonia; 1- Comunicação de " + "dados; 2- TV por assinatura; 3- Provimento de acesso à Internet; 4- " + "Multimídia; 9- Outros" + ), + ) + + DT_INI_SERV = fields.Date( + string="Data em que se iniciou a prestação do serviço", sped_length="8*" + ) + + DT_FIN_SERV = fields.Date( + string="Data em que se encerrou a prestação do serviço", sped_length="8*" + ) + + PER_FISCAL = fields.Char( + string="Período fiscal da prestação do serviço", + xsd_type="numeric_code", + sped_length="6*", + help="Período fiscal da prestação do serviço (MMAAAA)", + ) + + COD_AREA = fields.Char( + string="Código de área do terminal faturado", + help="Código de área do terminal faturado, próprio da prestadora", + ) + + TERMINAL = fields.Integer(string="Identificação do terminal faturado") + + reg_D530_ids_RegistroD500_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d500", + string="Nota Fiscal de Serviço de Comunicação", + required=True, + ondelete="cascade", + help=( + "Nota Fiscal de Serviço de Comunicação (código 21) e Serviço de " + "Telecomunicação (código 22)" + ), + ) + + +class RegistroD590(models.AbstractModel): + "Registro Analítico do Documento (códigos 21 e 22)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d590" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código Fiscal de Operação e Prestação, conforme a tabela indicada no item " + "4.2.2" + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da operação correspondente à combinação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da operação correspondente à combinação de CST_ICMS, CFOP e alíquota" + " do ICMS, incluídas as despesas acessórias e acréscimos" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ICMS' referente à " + "combinação CST_ICMS,CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ICMS' referente à combinação CST_ICMS," + " CFOP e alíquota do ICMS" + ), + ) + + VL_BC_ICMS_UF = fields.Monetary( + string="Parcela correspondente ao valor da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao valor da base de cálculo do ICMS de outras UFs, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS_UF = fields.Char( + string="Parcela correspondente ao valor do ICMS", + sped_length="2", + help=( + "Parcela correspondente ao valor do ICMS de outras UFs, referente " + "combinação de CST_ICMS, CFOP e alíquota do ICMS à N" + ), + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS." + ), + ) + + COD_OBS = fields.Char( + string="Código da observação", + sped_length="6", + help="Código da observação (campo 02 do Registro 0460)", + ) + + reg_D590_ids_RegistroD500_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d500", + string="Nota Fiscal de Serviço de Comunicação", + required=True, + ondelete="cascade", + help=( + "Nota Fiscal de Serviço de Comunicação (código 21) e Serviço de " + "Telecomunicação (código 22)" + ), + ) + + +class RegistroD600(models.AbstractModel): + """Consolidação da Prestação de Serviços - Notas de Serviço de Comunicação + (código 21) e de Serviço de Telecomunicação (código 22)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d600" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + COD_MUN = fields.Char( + string="Código do município dos terminais faturados", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município dos terminais faturados, conforme a tabela IBGE", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + COD_CONS = fields.Char( + string="Código de classe de consumo dos serviços", + xsd_type="numeric_code", + sped_length="2*", + help=( + "Código de classe de consumo dos serviços de comunicação ou de " + "telecomunicação, conforme a tabela 4.4.4" + ), + ) + + QTD_CONS = fields.Integer( + string="Quantidade", help="Quantidade de documentos consolidados neste registro" + ) + + DT_DOC = fields.Date(string="Data dos documentos consolidados", sped_length="8*") + + VL_DOC = fields.Monetary( + string="Valor total acumulado dos documentos fiscais", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor acumulado dos descontos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV = fields.Monetary( + string="Valor acumulado das prestações", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor acumulado das prestações de serviços tributados pelo ICMS", + ) + + VL_SERV_NT = fields.Monetary( + string="Valor acumulado dos serviços não-tributados", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor acumulado dos serviços não-tributados pelo ICMS", + ) + + VL_TERC = fields.Monetary( + string="Valores cobrados em nome de terceiros", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DA = fields.Monetary( + string="Valor acumulado das despesas acessórias", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + reg_D610_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d610", + "reg_D610_ids_RegistroD600_id", + string="D610 Itens do Documento Consolidado", + sped_card="1:N", + help="D610 Itens do Documento Consolidado (códigos 21 e 22)", + ) + + reg_D690_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d690", + "reg_D690_ids_RegistroD600_id", + string="D690 Registro Analítico dos Documentos", + sped_card="1:N", + help="D690 Registro Analítico dos Documentos (códigos 21 e 22)", + ) + + +class RegistroD610(models.AbstractModel): + "Itens do Documento Consolidado (códigos 21 e 22)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d610" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_CLASS = fields.Char( + string="Código de classificação do item do serviço", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código de classificação do item do serviço de comunicação ou de " + "telecomunicação, conforme a tabela 4.4.1" + ), + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade acumulada do item", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor acumulado do item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor acumulado dos descontos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código Fiscal de Operação e Prestação conforme tabela indicada no item " + "4.2.2" + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS debitado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS_UF = fields.Monetary( + string="Valor da base de cálculo do ICMS a outras UFs", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS_UF = fields.Monetary( + string="Valor do ICMS a outras UFs", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS." + ), + ) + + VL_PIS = fields.Monetary( + string="Valor acumulado do PIS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_COFINS = fields.Monetary( + string="Valor acumulado da COFINS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + reg_D610_ids_RegistroD600_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d600", + string="Consolidação da Prestação de Serviços", + required=True, + ondelete="cascade", + help=( + "Consolidação da Prestação de Serviços - Notas de Serviço de Comunicação " + "(código 21) e de Serviço de Telecomunicação (código 22)" + ), + ) + + +class RegistroD690(models.AbstractModel): + "Registro Analítico dos Documentos (códigos 21 e 22)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d690" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código Fiscal de Operação e Prestação, conforme a tabela indicada no item " + "4.2.2" + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da operação correspondente à combinação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da operação correspondente à combinação de CST_ICMS, CFOP e alíquota" + " do ICMS, incluídas as despesas acessórias e acréscimos" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ICMS' referente à " + "combinação CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ICMS' referente à combinação CST_ICMS," + " CFOP e alíquota do ICMS" + ), + ) + + VL_BC_ICMS_UF = fields.Monetary( + string="Parcela correspondente ao valor da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao valor da base de cálculo do ICMS de outras UFs, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS_UF = fields.Monetary( + string="Parcela correspondente ao valor do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao valor do ICMS de outras UFs, referente à " + "combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_D690_ids_RegistroD600_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d600", + string="Consolidação da Prestação de Serviços", + required=True, + ondelete="cascade", + help=( + "Consolidação da Prestação de Serviços - Notas de Serviço de Comunicação " + "(código 21) e de Serviço de Telecomunicação (código 22)" + ), + ) + + +class RegistroD695(models.AbstractModel): + """Consolidação da Prestação de Serviços - Notas de Serviço de Comunicação + (código 21) e de Serviço de Telecomunicação (código 22)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d695" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + NRO_ORD_INI = fields.Char( + string="Número de ordem inicial", xsd_type="numeric_code", sped_length="9" + ) + + NRO_ORD_FIN = fields.Char( + string="Número de ordem final", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC_INI = fields.Date( + string="Data de emissão inicial", + sped_length="8*", + help=( + "Data de emissão inicial dos documentos / Data inicial de vencimento da " + "fatura" + ), + ) + + DT_DOC_FIN = fields.Date( + string="Data de emissão final dos documentos / Data final", + sped_length="8*", + help=( + "Data de emissão final dos documentos / Data final do vencimento da fatura" + ), + ) + + NOM_MEST = fields.Char( + string="Nome do arquivo Mestre de Documento Fiscal", sped_length="33" + ) + + CHV_COD_DIG = fields.Char( + string="Chave de codificação digital do arquivo Mestre", + sped_length="32", + help="Chave de codificação digital do arquivo Mestre de Documento Fiscal", + ) + + reg_D696_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d696", + "reg_D696_ids_RegistroD695_id", + string="D696 Registro Analítico dos Documentos", + sped_card="1:N", + help="D696 Registro Analítico dos Documentos (códigos 21 e 22)", + ) + + +class RegistroD696(models.AbstractModel): + "Registro Analítico dos Documentos (códigos 21 e 22)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d696" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código Fiscal de Operação e Prestação, conforme a tabela indicada no item " + "4.2.2" + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da operação correspondente à combinação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da operação correspondente à combinação de CST_ICMS, CFOP e alíquota" + " do ICMS, incluídas as despesas acessórias e acréscimos" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ICMS' referente à " + "combinação CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ICMS' referente à combinação CST_ICMS," + " CFOP e alíquota do ICMS" + ), + ) + + VL_BC_ICMS_UF = fields.Monetary( + string="Parcela correspondente ao valor da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao valor da base de cálculo do ICMS de outras UFs, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_ICMS_UF = fields.Monetary( + string="Parcela correspondente ao valor do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao valor do ICMS de outras UFs, referente à " + "combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + reg_D696_ids_RegistroD695_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d695", + string="Consolidação da Prestação de Serviços", + required=True, + ondelete="cascade", + help=( + "Consolidação da Prestação de Serviços - Notas de Serviço de Comunicação " + "(código 21) e de Serviço de Telecomunicação (código 22)" + ), + ) + + reg_D697_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d697", + "reg_D697_ids_RegistroD696_id", + string="D697 Registro de informações de outras UFs", + sped_card="1:N", + help=( + "D697 Registro de informações de outras UFs, relativamente aos serviços " + "“não-medidos” de televisão por assinatura via satélite" + ), + ) + + +class RegistroD697(models.AbstractModel): + """Registro de informações de outras UFs, relativamente aos serviços “não- + medidos” de televisão por assinatura via satélite""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d697" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + UF = fields.Char(string="Sigla da unidade da federação", sped_length="2*") + + VL_BC_ICMS = fields.Monetary( + string="Valor da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + reg_D697_ids_RegistroD696_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d696", + string="Registro Analítico dos Documentos", + required=True, + ondelete="cascade", + help="Registro Analítico dos Documentos (códigos 21 e 22)", + ) + + +class RegistroD700(models.AbstractModel): + """Nota Fiscal Fatura Eletrônica de Serviços de Comunicação – NFCom (código + 62).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d700" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_OPER = fields.Char( + string="Indicador do tipo de prestação", + sped_length="1*", + help="Indicador do tipo de prestação: 0: Entrada 1: Saída", + ) + + IND_EMIT = fields.Char( + string="Indicador do emitente do documento fiscal", + sped_length="1*", + help=( + "Indicador do emitente do documento fiscal: 0: Emissão própria; 1: " + "Terceiros." + ), + ) + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (Campo 02 do Registro 0150) do prestador, no caso " + "de entradas." + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a Tabela 4.1.1.", + ) + + COD_SIT = fields.Char( + string="Código da situação do documento fiscal", + xsd_type="numeric_code", + sped_length="2*", + help="Código da situação do documento fiscal, conforme a Tabela 4.1.2.", + ) + + SER = fields.Char( + string="Série do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + DT_E_S = fields.Date(string="Data da entrada ou da saída", sped_length="8*") + + VL_DOC = fields.Monetary( + string="Valor do documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor do desconto", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV = fields.Monetary( + string="Valor dos serviços tributados pelo ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV_NT = fields.Monetary( + string="Valores cobrados em nome do prestador sem destaque", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valores cobrados em nome do prestador sem destaque de ICMS.", + ) + + VL_TERC = fields.Monetary( + string="Valores cobrados em nome de terceiros", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DA = fields.Monetary( + string="Valor de despesas acessórias indicadas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor de despesas acessórias indicadas no documento fiscal.", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor da Base de Cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da Base de Cálculo (BC) do ICMS.", + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + COD_INF = fields.Char( + string="Código da informação complementar", + sped_length="6", + help=( + "Código da informação complementar do documento fiscal (campo 02 do " + "Registro 0450)." + ), + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS/Pasep", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_COFINS = fields.Monetary( + string="Valor do Cofins", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + CHV_DOCE = fields.Char( + string="Chave da Nota Fiscal Fatura de Serviço", + xsd_type="numeric_code", + sped_length="44*", + help="Chave da Nota Fiscal Fatura de Serviço de Comunicação Eletrônica.", + ) + + FIN_DOCE = fields.Char( + string="Finalidade da emissão do documento eletrônico", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Finalidade da emissão do documento eletrônico: 0 - NFCom Normal; 3 - NFCom" + " de Substituição; 4 - NFCom de Ajuste;" + ), + ) + + TIP_FAT = fields.Char( + string="Tipo de faturamento do documento eletrônico", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Tipo de faturamento do documento eletrônico: 0 - Faturamento Normal; 1 - " + "Faturamento centralizado; 2 – Cofaturamento" + ), + ) + + COD_MOD_DOC_REF = fields.Char( + string="Código do modelo do documento fiscal referenciado", + xsd_type="numeric_code", + sped_length="2*", + help=( + "Código do modelo do documento fiscal referenciado, conforme a Tabela " + "4.1.1." + ), + ) + + CHV_DOCE_REF = fields.Char( + string="Chave da nota referenciada", xsd_type="numeric_code", sped_length="44*" + ) + + HASH_DOC_REF = fields.Char( + string="Código de autenticação digital do registro", + sped_length="32", + help=( + "Código de autenticação digital do registro, campo 36 do registro do " + "Arquivo tipo mestre de documento fiscal, conforme definido no Convênio " + "115/2003." + ), + ) + + SER_DOC_REF = fields.Char( + string="Série do documento fiscal referenciado", sped_length="4" + ) + + NUM_DOC_REF = fields.Char( + string="Número do documento fiscal referenciado", + xsd_type="numeric_code", + sped_length="9", + ) + + MES_DOC_REF = fields.Char( + string="Mês e ano da emissão", + xsd_type="numeric_code", + sped_length="6*", + help="Mês e ano da emissão do documento fiscal referenciado.", + ) + + COD_MUN_DEST = fields.Char( + string="Código do município do destinatário conforme", + xsd_type="numeric_code", + sped_length="7*", + help="Código do município do destinatário conforme a tabela do IBGE.", + ) + + DED = fields.Float( + string="Deduções", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + reg_D730_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d730", + "reg_D730_ids_RegistroD700_id", + string="D730", + sped_card="1:N", + help=( + "D730 Registro Analítico Nota Fiscal Fatura Eletrônica de Serviços de " + "Comunicação – NFCom (código 62)." + ), + ) + + reg_D735_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d735", + "reg_D735_ids_RegistroD700_id", + string="D735 Observações do lançamento fiscal", + sped_card="1:N", + help="D735 Observações do lançamento fiscal (código 62).", + ) + + +class RegistroD730(models.AbstractModel): + """Registro Analítico Nota Fiscal Fatura Eletrônica de Serviços de + Comunicação – NFCom (código 62).""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d730" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3 *", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4 *", + help=( + "Código Fiscal de Operação e Prestação, conforme a tabela indicada no item " + "4.2.2" + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da prestação correspondente à combinação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da prestação correspondente à combinação de CST_ICMS, CFOP, e " + "alíquota do ICMS, incluídas as despesas acessórias e acréscimos" + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ICMS' referente à " + "combinação CST_ICMS, CFOP, e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ICMS' referente à combinação CST_ICMS," + " CFOP, e alíquota do ICMS, incluindo o FCP, quando aplicável, referente à " + "combinação de CST_ICMS, CFOP e alíquota do ICMS." + ), + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS." + ), + ) + + COD_OBS = fields.Char( + string="Código da observação", + sped_length="6", + help="Código da observação (campo 02 do Registro 0460)", + ) + + reg_D730_ids_RegistroD700_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d700", + string="Nota Fiscal Fatura Eletrônica de Serviços", + required=True, + ondelete="cascade", + help=( + "Nota Fiscal Fatura Eletrônica de Serviços de Comunicação – NFCom (código " + "62)." + ), + ) + + reg_D731_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d731", + "reg_D731_ids_RegistroD730_id", + string="D731 Informação de Fundo de combate", + sped_card="1:N", + help="D731 Informação de Fundo de combate à pobreza – FCP (código 62).", + ) + + +class RegistroD731(models.AbstractModel): + "Informação de Fundo de combate à pobreza – FCP (código 62)." + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d731" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + VL_FCP_OP = fields.Monetary( + string="Valor do Fundo de Combate à Pobreza", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do Fundo de Combate à Pobreza (FCP) vinculado à operação própria, na" + " combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + reg_D731_ids_RegistroD730_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d730", + string="Registro Analítico Nota Fiscal Fatura Eletrônica", + required=True, + ondelete="cascade", + help=( + "Registro Analítico Nota Fiscal Fatura Eletrônica de Serviços de " + "Comunicação – NFCom (código 62)." + ), + ) + + +class RegistroD735(models.AbstractModel): + "Observações do lançamento fiscal (código 62)." + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d735" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_OBS = fields.Char( + string="Código da observação do lançamento fiscal", + sped_length="6", + help="Código da observação do lançamento fiscal (campo 02 do Registro 0460)", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar do código de observação") + + reg_D735_ids_RegistroD700_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d700", + string="Nota Fiscal Fatura Eletrônica de Serviços", + required=True, + ondelete="cascade", + help=( + "Nota Fiscal Fatura Eletrônica de Serviços de Comunicação – NFCom (código " + "62)." + ), + ) + + reg_D737_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d737", + "reg_D737_ids_RegistroD735_id", + string="D737 Outras obrigações tributárias", + sped_card="1:N", + help="D737 Outras obrigações tributárias, ajustes e informações de valores", + ) + + +class RegistroD737(models.AbstractModel): + "Outras obrigações tributárias, ajustes e informações de valores" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d737" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_AJ = fields.Char( + string="Código do ajustes/benefício/incentivo", + sped_length="1*", + help=( + "Código do ajustes/benefício/incentivo, conforme tabela indicada no item " + "5.3." + ), + ) + + DESCR_COMPL_AJ = fields.Char( + string="Descrição complementar do ajuste", + help="Descrição complementar do ajuste do documento fiscal", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_BC_ICMS = fields.Monetary( + string="Base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_OUTROS = fields.Monetary( + string="Outros valores", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + reg_D737_ids_RegistroD735_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d735", + string="Observações do lançamento fiscal", + required=True, + ondelete="cascade", + help="Observações do lançamento fiscal (código 62).", + ) + + +class RegistroD750(models.AbstractModel): + """Escrituração consolidada da nota fiscal fatura eletrônica de serviços de + comunicação - NFCom (código 62)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d750" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a Tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="3") + + DT_DOC = fields.Date(string="Data da emissão dos documentos", sped_length="8*") + + QTD_CONS = fields.Integer( + string="Quantidade", help="Quantidade de documentos consolidados neste registro" + ) + + IND_PREPAGO = fields.Char( + string="Forma de pagamento", + xsd_type="numeric_code", + sped_length="1", + help="Forma de pagamento: 0 – pré pago 1 – pós pago", + ) + + VL_DOC = fields.Monetary( + string="Valor total dos documentos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV = fields.Monetary( + string="Valor dos serviços tributados pelo ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV_NT = fields.Monetary( + string="Valores cobrados em nome do prestador sem destaque", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valores cobrados em nome do prestador sem destaque de ICMS.", + ) + + VL_TERC = fields.Monetary( + string="Valor total cobrado em nome de terceiros", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor total dos descontos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DA = fields.Monetary( + string="Valor total das despesas acessórias", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor total da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor total do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_PIS = fields.Monetary( + string="Valor total do PIS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_COFINS = fields.Monetary( + string="Valor total da COFINS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + DED = fields.Float( + string="Deduções", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + reg_D760_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d760", + "reg_D760_ids_RegistroD750_id", + string="D760 Registro Analítico", + sped_card="1:N", + help=( + "D760 Registro Analítico da escrituração consolidada da nota fiscal fatura " + "eletrônica de serviços de comunicação - NFCom (código 62)" + ), + ) + + +class RegistroD760(models.AbstractModel): + """Registro Analítico da escrituração consolidada da nota fiscal fatura + eletrônica de serviços de comunicação - NFCom (código 62)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d760" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código Fiscal de Operação e Prestação, conforme a tabela indicada no item " + "4.2.2" + ), + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_OPR = fields.Monetary( + string="Valor da operação correspondente à combinação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da operação correspondente à combinação de CST_ICMS, CFOP, e " + "alíquota do ICMS, incluídas as despesas acessórias menos os descontos " + "incondicionais." + ), + ) + + VL_BC_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do ICMS' referente à " + "combinação CST_ICMS, CFOP, e alíquota do ICMS" + ), + ) + + VL_ICMS = fields.Monetary( + string="Parcela correspondente ao 'Valor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do ICMS' referente à combinação CST_ICMS," + " CFOP, e alíquota do ICMS" + ), + ) + + VL_RED_BC = fields.Monetary( + string="Valor não tributado em função da redução da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor não tributado em função da redução da base de cálculo do ICMS, " + "referente à combinação de CST_ICMS, CFOP e alíquota do ICMS." + ), + ) + + COD_OBS = fields.Char( + string="Código da observação", + sped_length="6", + help="Código da observação (campo 02 do Registro 0460)", + ) + + reg_D760_ids_RegistroD750_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d750", + string="Escrituração consolidada", + required=True, + ondelete="cascade", + help=( + "Escrituração consolidada da nota fiscal fatura eletrônica de serviços de " + "comunicação - NFCom (código 62)" + ), + ) + + reg_D761_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.d761", + "reg_D761_ids_RegistroD760_id", + string="D761 Informações do fundo de combate", + sped_card="1:1", + help="D761 Informações do fundo de combate à pobreza FCP – (Código 62)", + ) + + +class RegistroD761(models.AbstractModel): + "Informações do fundo de combate à pobreza FCP – (Código 62)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.d761" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + VL_FCP_OP = fields.Monetary( + string="Valor do Fundo de Combate à Pobreza", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do Fundo de Combate à Pobreza (FCP) vinculado à operação própria, na" + " combinação de CST_ICMS, CFOP e alíquota do ICMS" + ), + ) + + reg_D761_ids_RegistroD760_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.d760", + string="Registro Analítico da escrituração consolidada", + required=True, + ondelete="cascade", + help=( + "Registro Analítico da escrituração consolidada da nota fiscal fatura " + "eletrônica de serviços de comunicação - NFCom (código 62)" + ), + ) + + +class RegistroE100(models.AbstractModel): + "Período de Apuração do ICMS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e100" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + DT_INI = fields.Date( + string="Data inicial a que a apuração se refere", sped_length="8*" + ) + + DT_FIN = fields.Date( + string="Data final a que a apuração se refere", sped_length="8*" + ) + + reg_E110_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e110", + "reg_E110_ids_RegistroE100_id", + string="E110 Apuração do ICMS", + sped_card="1:1", + help="E110 Apuração do ICMS - Operações Próprias", + ) + + +class RegistroE110(models.AbstractModel): + "Apuração do ICMS - Operações Próprias" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e110" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + VL_TOT_DEBITOS = fields.Monetary( + string="Valor total dos débitos por 'Saídas e prestações", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos débitos por 'Saídas e prestações com débito do imposto'" + ), + ) + + VL_AJ_DEBITOS = fields.Monetary( + string="Valor total dos ajustes a débito decorrentes", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total dos ajustes a débito decorrentes do documento fiscal", + ) + + VL_TOT_AJ_DEBITOS = fields.Monetary( + string="Valor total de 'Ajustes a débito'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ESTORNOS_CRED = fields.Monetary( + string="Valor total de Ajustes “Estornos de créditos”", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_TOT_CREDITOS = fields.Monetary( + string="Valor total dos créditos por 'Entradas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos créditos por 'Entradas e aquisições com crédito do " + "imposto'" + ), + ) + + VL_AJ_CREDITOS = fields.Monetary( + string="Valor total dos ajustes a crédito decorrentes", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total dos ajustes a crédito decorrentes do documento fiscal", + ) + + VL_TOT_AJ_CREDITOS = fields.Monetary( + string="Valor total de 'Ajustes a crédito'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ESTORNOS_DEB = fields.Monetary( + string="Valor total de Ajustes “Estornos de Débitos”", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SLD_CREDOR_ANT = fields.Monetary( + string="Valor total de 'Saldo credor do período anterior'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SLD_APURADO = fields.Monetary( + string="Valor do saldo devedor apurado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_TOT_DED = fields.Monetary( + string="Valor total de 'Deduções'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS_RECOLHER = fields.Monetary( + string="Valor total de 'ICMS a recolher", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total de 'ICMS a recolher (11-12)", + ) + + VL_SLD_CREDOR_TRANSPORTAR = fields.Monetary( + string="Valor total de 'Saldo credor a transportar", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total de 'Saldo credor a transportar para o período seguinte”", + ) + + DEB_ESP = fields.Float( + string="Valores recolhidos ou a recolher", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Valores recolhidos ou a recolher, extra-apuração", + ) + + reg_E110_ids_RegistroE100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e100", + string="Período de Apuração do ICMS", + required=True, + ondelete="cascade", + ) + + reg_E111_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e111", + "reg_E111_ids_RegistroE110_id", + string="E111 Ajuste/Benefício/Incentivo da Apuração", + sped_card="1:N", + help="E111 Ajuste/Benefício/Incentivo da Apuração do ICMS", + ) + + reg_E115_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e115", + "reg_E115_ids_RegistroE110_id", + string="E115 Informações Adicionais da Apuração do ICMS", + sped_card="1:N", + help=( + "E115 Informações Adicionais da Apuração do ICMS - Valores Declaratórios" + ), + ) + + reg_E116_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e116", + "reg_E116_ids_RegistroE110_id", + string="E116 Obrigações do ICMS a Recolher", + sped_card="1:N", + help="E116 Obrigações do ICMS a Recolher - Obrigações Próprias", + ) + + +class RegistroE111(models.AbstractModel): + "Ajuste/Benefício/Incentivo da Apuração do ICMS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e111" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_AJ_APUR = fields.Char( + string="Código do ajuste da apuração e dedução", + sped_length="8*", + help="Código do ajuste da apuração e dedução, conforme a tabela indicada no", + ) + + DESCR_COMPL_AJ = fields.Char(string="Descrição complementar do ajuste da apuração") + + VL_AJ_APUR = fields.Monetary( + string="Valor do ajuste da apuração", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_E111_ids_RegistroE110_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e110", + string="Apuração do ICMS", + required=True, + ondelete="cascade", + help="Apuração do ICMS - Operações Próprias", + ) + + reg_E112_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e112", + "reg_E112_ids_RegistroE111_id", + string="E112 Informações Adicionais dos Ajustes", + sped_card="1:N", + help="E112 Informações Adicionais dos Ajustes da Apuração do ICMS", + ) + + reg_E113_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e113", + "reg_E113_ids_RegistroE111_id", + string="E113 Informações Adicionais dos Ajustes", + sped_card="1:N", + help=( + "E113 Informações Adicionais dos Ajustes da Apuração do ICMS - " + "Identificação dos documentos fiscais" + ), + ) + + +class RegistroE112(models.AbstractModel): + "Informações Adicionais dos Ajustes da Apuração do ICMS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e112" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + NUM_DA = fields.Char( + string="Número do documento de arrecadação estadual", + help="Número do documento de arrecadação estadual, se houver", + ) + + NUM_PROC = fields.Char( + string="Número do processo ao qual o ajuste está vinculado", + sped_length="6", + help="Número do processo ao qual o ajuste está vinculado, se houver", + ) + + IND_PROC = fields.Char( + string="Indicador da origem do processo", + sped_length="1*", + help=( + "Indicador da origem do processo: 0- Sefaz 1- Justiça Federal 2- Justiça " + "Estadual 9- Outros" + ), + ) + + PROC = fields.Char( + string="Descrição resumida do processo que embasou", + help="Descrição resumida do processo que embasou o lançamento", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar") + + reg_E112_ids_RegistroE111_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e111", + string="Ajuste/Benefício/Incentivo da Apuração do ICMS", + required=True, + ondelete="cascade", + ) + + +class RegistroE113(models.AbstractModel): + """Informações Adicionais dos Ajustes da Apuração do ICMS - Identificação + dos documentos fiscais""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e113" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - do emitente do " + "documento ou do remetente das mercadorias, no caso de entradas - do " + "adquirente, no caso de saídas" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_AJ_ITEM = fields.Monetary( + string="Valor do ajuste para a operação/item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CHV_DOCE = fields.Char( + string="Chave do Documento Eletrônico", + xsd_type="numeric_code", + sped_length="44*", + ) + + reg_E113_ids_RegistroE111_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e111", + string="Ajuste/Benefício/Incentivo da Apuração do ICMS", + required=True, + ondelete="cascade", + ) + + +class RegistroE115(models.AbstractModel): + "Informações Adicionais da Apuração do ICMS - Valores Declaratórios" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e115" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_INF_ADIC = fields.Char( + string="Código da informação adicional conforme tabela", + sped_length="8*", + help=( + "Código da informação adicional conforme tabela a ser definida pelas SEFAZ," + " conforme tabela definida no item 5.2" + ), + ) + + VL_INF_ADIC = fields.Monetary( + string="Valor referente à informação adicional", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + DESCR_COMPL_AJ = fields.Char(string="Descrição complementar do ajuste") + + reg_E115_ids_RegistroE110_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e110", + string="Apuração do ICMS", + required=True, + ondelete="cascade", + help="Apuração do ICMS - Operações Próprias", + ) + + +class RegistroE116(models.AbstractModel): + "Obrigações do ICMS a Recolher - Obrigações Próprias" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e116" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_OR = fields.Char( + string="Código da obrigação a recolher", + sped_length="3*", + help="Código da obrigação a recolher, conforme a tabela 5.4", + ) + + VL_OR = fields.Monetary( + string="Valor da obrigação a recolher", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + DT_VCTO = fields.Date(string="Data de vencimento da obrigação", sped_length="8*") + + COD_REC = fields.Char( + string="Código de receita referente à obrigação", + help=( + "Código de receita referente à obrigação, próprio da unidade da federação, " + "conforme legislação estadual" + ), + ) + + NUM_PROC = fields.Char( + string="Número do processo ou auto de infração", + sped_length="6", + help=( + "Número do processo ou auto de infração ao qual a obrigação está vinculada," + " se houver" + ), + ) + + IND_PROC = fields.Char( + string="Indicador da origem do processo", + sped_length="1*", + help=( + "Indicador da origem do processo: 0- Sefaz; 1- Justiça Federal; 2- Justiça " + "Estadual; 9- Outros" + ), + ) + + PROC = fields.Char( + string="Descrição resumida do processo que embasou", + help="Descrição resumida do processo que embasou o lançamento", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar das obrigações a recolher") + + MES_REF = fields.Char( + string="Informe o mês de referência no formato “mmaaaa”", + xsd_type="numeric_code", + sped_length="6*", + ) + + reg_E116_ids_RegistroE110_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e110", + string="Apuração do ICMS", + required=True, + ondelete="cascade", + help="Apuração do ICMS - Operações Próprias", + ) + + +class RegistroE200(models.AbstractModel): + "Período de Apuração do ICMS - Substituição Tributária" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e200" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + UF = fields.Char( + string="Sigla da unidade da federação a que se refere", + sped_length="2*", + help="Sigla da unidade da federação a que se refere a apuração do ICMS ST", + ) + + DT_INI = fields.Date( + string="Data inicial a que a apuração se refere", sped_length="8*" + ) + + DT_FIN = fields.Date( + string="Data final a que a apuração se refere", sped_length="8*" + ) + + reg_E210_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e210", + "reg_E210_ids_RegistroE200_id", + string="E210 Apuração do ICMS", + sped_card="1:1", + help="E210 Apuração do ICMS - Substituição Tributária", + ) + + +class RegistroE210(models.AbstractModel): + "Apuração do ICMS - Substituição Tributária" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e210" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + IND_MOV_ST = fields.Char( + string="Indicador de movimento", + sped_length="1", + help=( + "Indicador de movimento: 0 - Sem operações com ST 1 - Com operações de ST" + ), + ) + + VL_SLD_CRED_ANT_ST = fields.Monetary( + string="Valor do 'Saldo credor de período anterior", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor do 'Saldo credor de período anterior - Substituição Tributária'", + ) + + VL_DEVOL_ST = fields.Monetary( + string="Valor total do ICMS ST de devolução de mercadorias", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_RESSARC_ST = fields.Monetary( + string="Valor total do ICMS ST de ressarcimentos", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUT_CRED_ST = fields.Monetary( + string="Valor total de Ajustes 'Outros créditos ST'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total de Ajustes 'Outros créditos ST' e “Estorno de débitos ST”", + ) + + VL_AJ_CREDITOS_ST = fields.Monetary( + string="Valor total dos ajustes a crédito de ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos ajustes a crédito de ICMS ST, provenientes de ajustes do " + "documento fiscal" + ), + ) + + VL_RETENCAO_ST = fields.Monetary( + string="Valor Total do ICMS retido", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor Total do ICMS retido por Substituição Tributária", + ) + + VL_OUT_DEB_ST = fields.Monetary( + string="Valor Total dos ajustes 'Outros débitos ST' '", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor Total dos ajustes 'Outros débitos ST' ' e “Estorno de créditos ST”" + ), + ) + + VL_AJ_DEBITOS_ST = fields.Monetary( + string="Valor total dos ajustes a débito de ICMS ST", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos ajustes a débito de ICMS ST, provenientes de ajustes do " + "documento fiscal" + ), + ) + + VL_SLD_DEV_ANT_ST = fields.Monetary( + string="Valor total de Saldo devedor antes das deduções", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DEDUCOES_ST = fields.Monetary( + string="Valor total dos ajustes 'Deduções ST'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS_RECOL_ST = fields.Monetary( + string="Imposto a recolher ST (11-12)", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SLD_CRED_ST_TRANSPORTAR = fields.Monetary( + string="Saldo credor de ST a transportar", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Saldo credor de ST a transportar para o período seguinte " + "[(03+04+05+06+07+12)- (08+09+10)]" + ), + ) + + DEB_ESP_ST = fields.Float( + string="Valores recolhidos ou a recolher", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Valores recolhidos ou a recolher, extra-apuração", + ) + + reg_E210_ids_RegistroE200_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e200", + string="Período de Apuração do ICMS", + required=True, + ondelete="cascade", + help="Período de Apuração do ICMS - Substituição Tributária", + ) + + reg_E250_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e250", + "reg_E250_ids_RegistroE210_id", + string="E250 Obrigações do ICMS a Recolher", + sped_card="1:N", + help="E250 Obrigações do ICMS a Recolher - Substituição Tributária", + ) + + +class RegistroE230(models.AbstractModel): + """Informações Adicionais dos Ajustes da Apuração do ICMS Substituição + Tributária""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e230" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + NUM_DA = fields.Char( + string="Número do documento de arrecadação estadual", + help="Número do documento de arrecadação estadual, se houver", + ) + + NUM_PROC = fields.Char( + string="Número do processo ao qual o ajuste está vinculado", + sped_length="6", + help="Número do processo ao qual o ajuste está vinculado, se houver", + ) + + IND_PROC = fields.Char( + string="Indicador da origem do processo", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Indicador da origem do processo: 0- Sefaz 1- Justiça Federal 2- Justiça " + "Estadual 9- Outros" + ), + ) + + PROC = fields.Char( + string="Descrição resumida do processo que embasou", + help="Descrição resumida do processo que embasou o lançamento", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar") + + +class RegistroE240(models.AbstractModel): + """Informações Adicionais dos Ajustes da Apuração do ICMS Substituição + Tributária - Identificação dos documentos fiscais""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e240" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - do emitente do " + "documento ou do remetente das mercadorias, no caso de entradas - do " + "adquirente, no caso de saídas" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_AJ_ITEM = fields.Monetary( + string="Valor do ajuste para a operação/item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CHV_DOCE = fields.Char( + string="Chave do Documento Eletrônico", + xsd_type="numeric_code", + sped_length="44*", + ) + + +class RegistroE250(models.AbstractModel): + "Obrigações do ICMS a Recolher - Substituição Tributária" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e250" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_OR = fields.Char( + string="Código da obrigação a recolher", + sped_length="3*", + help="Código da obrigação a recolher, conforme a tabela 5.4", + ) + + VL_OR = fields.Monetary( + string="Valor da obrigação ICMS ST a recolher", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + DT_VCTO = fields.Date(string="Data de vencimento da obrigação", sped_length="8*") + + COD_REC = fields.Char( + string="Código de receita referente à obrigação", + help=( + "Código de receita referente à obrigação, próprio da unidade da federação " + "do contribuinte substituído" + ), + ) + + NUM_PROC = fields.Char( + string="Número do processo ou auto de infração", + sped_length="6", + help=( + "Número do processo ou auto de infração ao qual a obrigação está vinculada," + " se houver" + ), + ) + + IND_PROC = fields.Char( + string="Indicador da origem do processo", + sped_length="1*", + help=( + "Indicador da origem do processo: 0- Sefaz 1- Justiça Federal 2- Justiça " + "Estadual 9- Outros" + ), + ) + + PROC = fields.Char( + string="Descrição resumida do processo que embasou", + help="Descrição resumida do processo que embasou o lançamento", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar das obrigações a recolher") + + MES_REF = fields.Char( + string="Informe o mês de referência no formato “mmaaaa”", + xsd_type="numeric_code", + sped_length="6*", + ) + + reg_E250_ids_RegistroE210_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e210", + string="Apuração do ICMS", + required=True, + ondelete="cascade", + help="Apuração do ICMS - Substituição Tributária", + ) + + +class RegistroE300(models.AbstractModel): + """Período de Apuração do ICMS Diferencial de Alíquota – UF Origem/Destino + EC 87/15""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e300" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + UF = fields.Char( + string="Sigla da unidade da Federação a que se refere", + sped_length="2", + help=( + "Sigla da unidade da Federação a que se refere à apuração do FCP e do ICMS " + "Diferencial de Alíquotas da UF de Origem/Destino" + ), + ) + + DT_INI = fields.Date( + string="Data Inicial a que a apuração se refere", sped_length="8*" + ) + + DT_FIN = fields.Date( + string="Data Final a que a apuração se refere", sped_length="8*" + ) + + reg_E310_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e310", + "reg_E310_ids_RegistroE300_id", + string="E310 Apuração do ICMS Diferencial", + sped_card="1:1", + help=( + "E310 Apuração do ICMS Diferencial de Alíquota – UF Origem/Destino EC 87/15" + ), + ) + + +class RegistroE310(models.AbstractModel): + """Apuração do ICMS Diferencial de Alíquota – UF Origem/Destino EC 87/15""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e310" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + IND_MOV_FCP_DIFAL = fields.Char( + string="Indicador de movimento", + help="Indicador de movimento: 0 - Sem operações 1 - Com operações", + ) + + VL_SLD_CRED_ANT_DIFAL = fields.Monetary( + string="Valor do 'Saldo credor", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do 'Saldo credor de período anterior – ICMS Diferencial de Alíquotas" + " da UF de Origem/Destino'" + ), + ) + + VL_TOT_DEBITOS_DIFAL = fields.Monetary( + string="Valor total dos débitos por 'Saídas e prestações", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos débitos por 'Saídas e prestações com débito do ICMS " + "referente ao diferencial de alíquotas devido à UF de Origem/Destino'" + ), + ) + + VL_OUT_DEB_DIFAL = fields.Monetary( + string="Valor total", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos ajustes 'Outros débitos ICMS Diferencial de Alíquotas da " + "UF de Origem/Destino' e “Estorno de créditos ICMS Diferencial de Alíquotas" + " da UF de Origem/Destino”" + ), + ) + + VL_TOT_CREDITOS_DIFAL = fields.Monetary( + string="Valor total dos créditos do ICMS referente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos créditos do ICMS referente ao diferencial de Alíquotas " + "devido à UF de Origem/Destino" + ), + ) + + VL_OUT_CRED_DIFAL = fields.Monetary( + string="Valor total (VL_OUT_CRED_DIFAL)", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total de Ajustes 'Outros créditos ICMS Diferencial de Alíquotas da " + "UF de Origem/Destino' e “Estorno de débitos ICMS Diferencial de Alíquotas " + "da UF de Origem/Destino”" + ), + ) + + VL_SLD_DEV_ANT_DIFAL = fields.Monetary( + string="Valor total de “Saldo devedor ICMS Diferencial", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total de “Saldo devedor ICMS Diferencial de Alíquotas da UF de " + "Origem/Destino antes das deduções”" + ), + ) + + VL_DEDUCOES_DIFAL = fields.Monetary( + string="Valor total dos ajustes 'Deduções ICMS Diferencial", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos ajustes 'Deduções ICMS Diferencial de Alíquotas da UF de " + "Origem/Destino'" + ), + ) + + VL_RECOL_DIFAL = fields.Monetary( + string="Valor recolhido ou a recolher referente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor recolhido ou a recolher referente ao ICMS Diferencial de Alíquotas " + "da UF de Origem/Destino (08-09)" + ), + ) + + VL_SLD_CRED_TRANSPORTAR_DIFAL = fields.Monetary( + string="Saldo credor a transportar", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Saldo credor a transportar para o período seguinte referente ao ICMS " + "Diferencial de Alíquotas da UF de Origem/Destino" + ), + ) + + DEB_ESP_DIFAL = fields.Float( + string="Valores recolhidos ou a recolher", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Valores recolhidos ou a recolher, extra-apuração - ICMS Diferencial de " + "Alíquotas da UF de Origem/Destino" + ), + ) + + VL_SLD_CRED_ANT_FCP = fields.Monetary( + string="Valor do 'Saldo credor de período anterior – FCP'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_TOT_DEB_FCP = fields.Monetary( + string="Valor total dos débitos FCP por 'Saídas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total dos débitos FCP por 'Saídas e prestações”", + ) + + VL_OUT_DEB_FCP = fields.Monetary( + string="Valor total dos ajustes 'Outros débitos FCP'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos ajustes 'Outros débitos FCP' e “Estorno de créditos FCP”" + ), + ) + + VL_TOT_CRED_FCP = fields.Monetary( + string="Valor total dos créditos FCP por Entradas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_OUT_CRED_FCP = fields.Monetary( + string="Valor total de Ajustes 'Outros créditos FCP'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total de Ajustes 'Outros créditos FCP' e “Estorno de débitos FCP”" + ), + ) + + VL_SLD_DEV_ANT_FCP = fields.Monetary( + string="Valor total de Saldo devedor FCP antes", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total de Saldo devedor FCP antes das deduções", + ) + + VL_DEDUCOES_FCP = fields.Monetary( + string="Valor total das deduções 'FCP'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_RECOL_FCP = fields.Monetary( + string="Valor recolhido ou a recolher referente ao FCP", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor recolhido ou a recolher referente ao FCP (18–19)", + ) + + VL_SLD_CRED_TRANSPORTAR_FCP = fields.Monetary( + string="VL_SLD_CRED_TRANSPORTAR_FCP", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Saldo credor a transportar para o período seguinte referente ao FCP", + ) + + DEB_ESP_FCP = fields.Integer( + string="Valores recolhidos ou a recolher (DEB_ESP_FCP)", + help="Valores recolhidos ou a recolher, extra-apuração - FCP", + ) + + reg_E310_ids_RegistroE300_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e300", + string="Período de Apuração do ICMS Diferencial", + required=True, + ondelete="cascade", + help=( + "Período de Apuração do ICMS Diferencial de Alíquota – UF Origem/Destino EC" + " 87/15" + ), + ) + + reg_E311_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e311", + "reg_E311_ids_RegistroE310_id", + string="E311 Ajuste/Benefício/Incentivo da Apuração", + sped_card="1:N", + help=( + "E311 Ajuste/Benefício/Incentivo da Apuração do ICMS Diferencial de " + "Alíquota – UF Origem/Destino EC 87/1" + ), + ) + + reg_E316_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e316", + "reg_E316_ids_RegistroE310_id", + string="E316 Obrigações do ICMS recolhido", + sped_card="1:N", + help=( + "E316 Obrigações do ICMS recolhido ou a recolher – Diferencial de Alíquota " + "– UF Origem/Destino EC 87/15" + ), + ) + + +class RegistroE311(models.AbstractModel): + """Ajuste/Benefício/Incentivo da Apuração do ICMS Diferencial de Alíquota – + UF Origem/Destino EC 87/1""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e311" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_AJ_APUR = fields.Char( + string="Código do ajuste da apuração e dedução", + sped_length="8*", + help=( + "Código do ajuste da apuração e dedução, conforme a tabela indicada no item" + " 5.1.1" + ), + ) + + DESCR_COMPL_AJ = fields.Char(string="Descrição complementar do ajuste da apuração") + + VL_AJ_APUR = fields.Monetary( + string="Valor do ajuste da apuração", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_E311_ids_RegistroE310_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e310", + string="Apuração do ICMS Diferencial", + required=True, + ondelete="cascade", + help="Apuração do ICMS Diferencial de Alíquota – UF Origem/Destino EC 87/15", + ) + + reg_E312_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e312", + "reg_E312_ids_RegistroE311_id", + string="E312 Informações Adicionais dos Ajustes", + sped_card="1:N", + help=( + "E312 Informações Adicionais dos Ajustes da Apuração do ICMS Diferencial de" + " Alíquota – UF Origem/Destino EC 87/15" + ), + ) + + reg_E313_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e313", + "reg_E313_ids_RegistroE311_id", + string="E313 Informações Adicionais da Apuração", + sped_card="1:N", + help=( + "E313 Informações Adicionais da Apuração do ICMS Diferencial de Alíquota – " + "UF Origem/Destino EC 87/15 Identificação dos Documentos Fiscais" + ), + ) + + +class RegistroE312(models.AbstractModel): + """Informações Adicionais dos Ajustes da Apuração do ICMS Diferencial de + Alíquota – UF Origem/Destino EC 87/15""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e312" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + NUM_DA = fields.Char( + string="Número do documento de arrecadação estadual", + help="Número do documento de arrecadação estadual, se houver", + ) + + NUM_PROC = fields.Char( + string="Número do processo ao qual o ajuste está vinculado", + sped_length="6", + help="Número do processo ao qual o ajuste está vinculado, se houver", + ) + + IND_PROC = fields.Char( + string="Indicador da origem do processo", + sped_length="1*", + help=( + "Indicador da origem do processo: 0- Sefaz 1- Justiça Federal 2- Justiça " + "Estadual 9- Outros" + ), + ) + + PROC = fields.Char( + string="Descrição resumida do processo que embasou", + help="Descrição resumida do processo que embasou o lançamento", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar") + + reg_E312_ids_RegistroE311_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e311", + string="Ajuste/Benefício/Incentivo da Apuração", + required=True, + ondelete="cascade", + help=( + "Ajuste/Benefício/Incentivo da Apuração do ICMS Diferencial de Alíquota – " + "UF Origem/Destino EC 87/1" + ), + ) + + +class RegistroE313(models.AbstractModel): + """Informações Adicionais da Apuração do ICMS Diferencial de Alíquota – UF + Origem/Destino EC 87/15 Identificação dos Documentos Fiscais""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e313" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help="Código do participante (campo 02 do Registro 0150):", + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + CHV_DOCE = fields.Char( + string="Chave do Documento Eletrônico", + xsd_type="numeric_code", + sped_length="44*", + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_AJ_ITEM = fields.Monetary( + string="Valor do ajuste para a operação/item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_E313_ids_RegistroE311_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e311", + string="Ajuste/Benefício/Incentivo da Apuração", + required=True, + ondelete="cascade", + help=( + "Ajuste/Benefício/Incentivo da Apuração do ICMS Diferencial de Alíquota – " + "UF Origem/Destino EC 87/1" + ), + ) + + +class RegistroE316(models.AbstractModel): + """Obrigações do ICMS recolhido ou a recolher – Diferencial de Alíquota – + UF Origem/Destino EC 87/15""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e316" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_OR = fields.Char( + string="Código da obrigação recolhida ou a recolher", + sped_length="3*", + help="Código da obrigação recolhida ou a recolher, conforme a tabela 5.4", + ) + + VL_OR = fields.Monetary( + string="Valor da obrigação recolhida ou a recolher", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + DT_VCTO = fields.Date(string="Data de vencimento da obrigação", sped_length="8*") + + COD_REC = fields.Char( + string="Código de receita referente à obrigação", + help=( + "Código de receita referente à obrigação, próprio da unidade da federação " + "da origem/destino, conforme legislação estadual" + ), + ) + + NUM_PROC = fields.Char( + string="Número do processo ou auto de infração", + sped_length="6", + help=( + "Número do processo ou auto de infração ao qual a obrigação está vinculada," + " se houver" + ), + ) + + IND_PROC = fields.Char( + string="Indicador da origem do processo", + sped_length="1*", + help=( + "Indicador da origem do processo: 0- SEFAZ 1- Justiça Federal 2- Justiça " + "Estadual 9- Outros" + ), + ) + + PROC = fields.Char( + string="Descrição resumida do processo que embasou", + help="Descrição resumida do processo que embasou o lançamento", + ) + + TXT_COMPL = fields.Char( + string="Descrição complementar", + help="Descrição complementar das obrigações recolhidas ou a recolher", + ) + + MES_REF = fields.Char( + string="Informe o mês de referência no formato “mmaaaa”", + xsd_type="numeric_code", + sped_length="6*", + ) + + reg_E316_ids_RegistroE310_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e310", + string="Apuração do ICMS Diferencial", + required=True, + ondelete="cascade", + help="Apuração do ICMS Diferencial de Alíquota – UF Origem/Destino EC 87/15", + ) + + +class RegistroE500(models.AbstractModel): + "Período de Apuração do IPI" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e500" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_APUR = fields.Char( + string="Indicador de período de apuração do IPI", + sped_length="1*", + help="Indicador de período de apuração do IPI: 0 - Mensal 1 - Decendial", + ) + + DT_INI = fields.Date( + string="Data inicial a que a apuração se refere", sped_length="8*" + ) + + DT_FIN = fields.Date( + string="Data final a que a apuração se refere", sped_length="8*" + ) + + reg_E520_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e520", + "reg_E520_ids_RegistroE500_id", + string="E520 Apuração do IPI", + sped_card="1:1", + ) + + reg_E510_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e510", + "reg_E510_ids_RegistroE500_id", + string="E510 Consolidação dos Valores de IPI", + sped_card="1:N", + ) + + +class RegistroE510(models.AbstractModel): + "Consolidação dos Valores de IPI" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e510" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + help="Código Fiscal de Operação e Prestação do agrupamento de itens", + ) + + CST_IPI = fields.Char( + string="Código da Situação Tributária referente ao IPI", + sped_length="2*", + help=( + "Código da Situação Tributária referente ao IPI, conforme a tabela indicada" + " no item 4.3.2" + ), + ) + + VL_CONT_IPI = fields.Monetary( + string="Parcela correspondente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor Contábil' referente ao CFOP e ao Código " + "de Tributação do IPI" + ), + ) + + VL_BC_IPI = fields.Monetary( + string="Parcela correspondente ao 'Valor da base", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor da base de cálculo do IPI' referente ao " + "CFOP e ao Código de Tributação do IPI, para operações tributadas" + ), + ) + + VL_IPI = fields.Monetary( + string="Parcela correspondente ao 'Valor do IPI' referente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Parcela correspondente ao 'Valor do IPI' referente ao CFOP e ao Código de " + "Tributação do IPI, para operações tributadas" + ), + ) + + reg_E510_ids_RegistroE500_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e500", + string="Período de Apuração do IPI", + required=True, + ondelete="cascade", + ) + + +class RegistroE520(models.AbstractModel): + "Apuração do IPI" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e520" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + VL_SD_ANT_IPI = fields.Monetary( + string="Saldo credor do IPI transferido", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Saldo credor do IPI transferido do período anterior", + ) + + VL_DEB_IPI = fields.Monetary( + string="Valor total dos débitos por 'Saídas com débito", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total dos débitos por 'Saídas com débito do imposto'", + ) + + VL_CRED_IPI = fields.Monetary( + string="Valor total dos créditos por 'Entradas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos créditos por 'Entradas e aquisições com crédito do " + "imposto'" + ), + ) + + VL_OD_IPI = fields.Monetary( + string="Valor de 'Outros débitos' do IPI", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor de 'Outros débitos' do IPI (inclusive estornos de crédito)", + ) + + VL_OC_IPI = fields.Monetary( + string="Valor de 'Outros créditos' do IPI", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor de 'Outros créditos' do IPI (inclusive estornos de débitos)", + ) + + VL_SC_IPI = fields.Monetary( + string="Valor do saldo credor do IPI a transportar", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor do saldo credor do IPI a transportar para o período seguinte", + ) + + VL_SD_IPI = fields.Monetary( + string="Valor do saldo devedor do IPI a recolher", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_E520_ids_RegistroE500_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e500", + string="Período de Apuração do IPI", + required=True, + ondelete="cascade", + ) + + reg_E530_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e530", + "reg_E530_ids_RegistroE520_id", + string="E530 Ajustes da Apuração do IPI", + sped_card="1:N", + ) + + +class RegistroE530(models.AbstractModel): + "Ajustes da Apuração do IPI" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e530" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + IND_AJ = fields.Char( + string="Indicador do tipo de ajuste", + sped_length="1*", + help="Indicador do tipo de ajuste: 0- Ajuste a débito 1- Ajuste a crédito", + ) + + VL_AJ = fields.Monetary( + string="9 Indicador da origem do documento vinculado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "9 Indicador da origem do documento vinculado ao ajuste: 0 - Processo " + "Judicial 1 - Processo Administrativo 2 - PER/DCOMP 3 – Documento Fiscal – " + "Outros." + ), + ) + + COD_AJ = fields.Char( + string="Código do ajuste da apuração", + sped_length="3*", + help=("Código do ajuste da apuração, conforme a tabela indicada no item 4.5.4"), + ) + + IND_DOC = fields.Char( + string="Indicador da origem do documento vinculado", + sped_length="1*", + help=( + "Indicador da origem do documento vinculado ao ajuste: 0 - Processo " + "Judicial 1 - Processo Administrativo 2 - PER/DCOMP 9 - Outros" + ), + ) + + NUM_DOC = fields.Char( + string="Número do documento / processo / declaração", + help=( + "Número do documento / processo / declaração ao qual o ajuste está " + "vinculado, se houver" + ), + ) + + DESCR_AJ = fields.Char(string="Descrição resumida do ajuste") + + reg_E530_ids_RegistroE520_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e520", + string="Apuração do IPI", + required=True, + ondelete="cascade", + ) + + reg_E531_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.e531", + "reg_E531_ids_RegistroE530_id", + string="E531 Informações Adicionais dos Ajustes", + sped_card="1:N", + help=( + "E531 Informações Adicionais dos Ajustes da Apuração do IPI – Identificação" + " dos Documentos Fiscais (01 e 55)" + ), + ) + + +class RegistroE531(models.AbstractModel): + """Informações Adicionais dos Ajustes da Apuração do IPI – Identificação + dos Documentos Fiscais (01 e 55)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.e531" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - do emitente do " + "documento ou do remetente das mercadorias, no caso de entradas - do " + "adquirente, no caso de saídas" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_AJ_ITEM = fields.Monetary( + string="Valor do ajuste para a operação/item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CHV_NFE = fields.Char( + string="Chave da Nota Fiscal Eletrônica", + xsd_type="numeric_code", + sped_length="44*", + help="Chave da Nota Fiscal Eletrônica (modelo 55)", + ) + + reg_E531_ids_RegistroE530_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.e530", + string="Ajustes da Apuração do IPI", + required=True, + ondelete="cascade", + ) + + +class RegistroG110(models.AbstractModel): + "ICMS - Ativo Permanente - CIAP" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.g110" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + DT_INI = fields.Date( + string="Data inicial a que a apuração se refere", sped_length="8*" + ) + + DT_FIN = fields.Date( + string="Data final a que a apuração se refere", sped_length="8*" + ) + + SALDO_IN_ICMS = fields.Float( + string="Saldo inicial de ICMS do CIAP", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Saldo inicial de ICMS do CIAP, composto por ICMS de bens que entraram " + "anteriormente ao período de apuração (somatório dos campos 05 a 08 dos " + "registros G125)" + ), + ) + + SOM_PARC = fields.Float( + string="Somatório das parcelas de ICMS passível", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Somatório das parcelas de ICMS passível de apropriação de cada bem (campo " + "10 do G125)" + ), + ) + + VL_TRIB_EXP = fields.Monetary( + string="Valor do somatório das saídas tributadas e saídas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor do somatório das saídas tributadas e saídas para exportação", + ) + + VL_TOTAL = fields.Monetary( + string="Valor total de saídas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + IND_PER_SAI = fields.Char( + string="Índice de participação do valor do somatório", + xsd_type="numeric_code", + help=( + "Índice de participação do valor do somatório das saídas tributadas e " + "saídas para exportação no valor total de saídas (Campo 06 dividido pelo " + "campo 07)" + ), + ) + + ICMS_APROP = fields.Float( + string="Valor de ICMS a ser apropriado na apuração do ICMS", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Valor de ICMS a ser apropriado na apuração do ICMS, correspondente à " + "multiplicação do campo 05 pelo campo 08" + ), + ) + + SOM_ICMS_OC = fields.Float( + string="Valor de outros créditos a ser apropriado", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Valor de outros créditos a ser apropriado na apuração do ICMS, " + "correspondente ao somatório do campo 09 dos registros G126" + ), + ) + + +class RegistroG126(models.AbstractModel): + "Outros créditos CIAP" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.g126" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + DT_INI = fields.Date(string="Data inicial do período de apuração", sped_length="8*") + + DT_FIM = fields.Date(string="Data final do período de apuração", sped_length="8*") + + NUM_PARC = fields.Char( + string="Número da parcela do ICMS", xsd_type="numeric_code", sped_length="3" + ) + + VL_PARC_PASS = fields.Monetary( + string="Valor da parcela de ICMS passível de apropriação", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da parcela de ICMS passível de apropriação - antes da aplicação da " + "participação percentual do valor das saídas tributadas/exportação sobre as" + " saídas totais" + ), + ) + + VL_TRIB_OC = fields.Monetary( + string="Valor do somatório das saídas tributadas e saídas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do somatório das saídas tributadas e saídas para exportação no " + "período indicado neste registro" + ), + ) + + VL_TOTAL = fields.Monetary( + string="Valor total de saídas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total de saídas no período indicado neste registro", + ) + + IND_PER_SAI = fields.Char( + string="Índice de participação do valor do somatório", + xsd_type="numeric_code", + help=( + "Índice de participação do valor do somatório das saídas tributadas e " + "saídas para exportação no valor total de saídas (Campo 06 dividido pelo " + "campo 07)" + ), + ) + + VL_PARC_APROP = fields.Monetary( + string="Valor de outros créditos de ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor de outros créditos de ICMS a ser apropriado como na apuração (campo " + "05 vezes o campo 08)" + ), + ) + + +class RegistroG130(models.AbstractModel): + "Identificação do documento fiscal" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.g130" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + IND_EMIT = fields.Char( + string="Indicador do emitente do documento fiscal", + sped_length="1*", + help=( + "Indicador do emitente do documento fiscal: 0 - Emissão própria; 1 - " + "Terceiros" + ), + ) + + COD_PART = fields.Char( + string="Código do participante ", + sped_length="6", + help=( + "Código do participante : - do emitente do documento ou do remetente das " + "mercadorias, no caso de entradas; - do adquirente, no caso de saídas" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo de documento fiscal", + sped_length="2*", + help="Código do modelo de documento fiscal, conforme tabela 4.1.1", + ) + + SERIE = fields.Char(string="Série do documento fiscal", sped_length="3") + + NUM_DOC = fields.Char( + string="Número de documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + CHV_NFE_CTE = fields.Char( + string="Chave do documento fiscal eletrônico", + xsd_type="numeric_code", + sped_length="44*", + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + NUM_DA = fields.Char( + string="Número do documento de arrecadação estadual", + help="Número do documento de arrecadação estadual, se houver", + ) + + reg_G140_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.g140", + "reg_G140_ids_RegistroG130_id", + string="G140 Identificação do item do documento fiscal", + sped_card="1:N", + ) + + +class RegistroG140(models.AbstractModel): + "Identificação do item do documento fiscal" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.g140" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + NUM_ITEM = fields.Char( + string="Número sequencial do item no documento fiscal", + xsd_type="numeric_code", + sped_length="3", + ) + + COD_ITEM = fields.Char( + string="Código correspondente do bem no documento fiscal", sped_length="6" + ) + + QTDE = fields.Float( + string="Quantidade", + xsd_type="TDec_1605", + digits=( + 16, + 5, + ), + help=( + "Quantidade, deste item da nota fiscal, que foi aplicada neste bem, " + "expressa na mesma unidade constante no documento fiscal de entrada" + ), + ) + + UNID = fields.Char( + string="Unidade do item constante no documento fiscal", + sped_length="6", + help="Unidade do item constante no documento fiscal de entrada", + ) + + VL_ICMS_OP_APLICADO = fields.Monetary( + string="Valor do ICMS da Operação Própria na entrada", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do ICMS da Operação Própria na entrada do item, proporcional à " + "quantidade aplicada no bem ou componente." + ), + ) + + VL_ICMS_ST_APLICADO = fields.Monetary( + string="Valor do ICMS ST na entrada do item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do ICMS ST na entrada do item, proporcional à quantidade aplicada no" + " bem ou componente." + ), + ) + + VL_ICMS_FRT_APLICADO = fields.Monetary( + string="Valor do ICMS sobre Frete do Conhecimento", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do ICMS sobre Frete do Conhecimento de Transporte na entrada do " + "item, proporcional à quantidade aplicada no bem ou componente." + ), + ) + + VL_ICMS_DIF_APLICADO = fields.Monetary( + string="Valor do ICMS Diferencial de Alíquota", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor do ICMS Diferencial de Alíquota, na entrada do item, proporcional à " + "quantidade aplicada no bem ou componente." + ), + ) + + reg_G140_ids_RegistroG130_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.g130", + string="Identificação do documento fiscal", + required=True, + ondelete="cascade", + ) + + +class RegistroH005(models.AbstractModel): + "Totais do Inventário" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.h005" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + DT_INV = fields.Date(string="Data do inventário", sped_length="8*") + + VL_INV = fields.Monetary( + string="Valor total do estoque", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + MOT_INV = fields.Char( + string="Informe o motivo do Inventário: 01", + sped_length="2*", + help=( + "Informe o motivo do Inventário: 01 - No final no período 02 - Na mudança " + "de forma de tributação da mercadoria (ICMS)" + ), + ) + + reg_H010_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.h010", + "reg_H010_ids_RegistroH005_id", + string="H010 Inventário", + sped_card="1:N", + ) + + +class RegistroH010(models.AbstractModel): + "Inventário" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.h010" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + UNID = fields.Char(string="Unidade do item", sped_length="6") + + QTD = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + VL_UNIT = fields.Float( + string="Valor unitário do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + VL_ITEM = fields.Monetary( + string="Valor do item", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + IND_PROP = fields.Char( + string="Indicador de propriedade/posse do item", + sped_length="1*", + help=( + "Indicador de propriedade/posse do item: 0- Item de propriedade do " + "informante e em seu poder 1- Item de propriedade do informante em posse de" + " terceiros 2- Item de propriedade de terceiros em posse do informante" + ), + ) + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - " + "proprietário/possuidor que não seja o informante do arquivo" + ), + ) + + TXT_COMPL = fields.Char(string="Descrição complementar") + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + VL_ITEM_IR = fields.Monetary( + string="Valor do item pare efeitos do Imposto de Renda", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_H010_ids_RegistroH005_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.h005", + string="Totais do Inventário", + required=True, + ondelete="cascade", + ) + + reg_H030_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.h030", + "reg_H030_ids_RegistroH010_id", + string="H030 Informações complementares do inventário", + sped_card="1:1", + help=( + "H030 Informações complementares do inventário das mercadorias sujeitas ao " + "regime de substituição tributária" + ), + ) + + reg_H020_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.h020", + "reg_H020_ids_RegistroH010_id", + string="H020 Informação complementar do Inventário", + sped_card="1.N", + ) + + +class RegistroH020(models.AbstractModel): + "Informação complementar do Inventário" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.h020" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + CST_ICMS = fields.Char( + string="Código da Situação Tributária referente ao ICMS", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária referente ao ICMS, conforme a tabela " + "indicada no item 4.3.1" + ), + ) + + BC_ICMS = fields.Float( + string="Informe a base de cálculo do ICMS", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ICMS = fields.Monetary( + string="Informe o valor do ICMS a ser debitado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Informe o valor do ICMS a ser debitado ou creditado", + ) + + reg_H020_ids_RegistroH010_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.h010", + string="Inventário", + required=True, + ondelete="cascade", + ) + + +class RegistroH030(models.AbstractModel): + """Informações complementares do inventário das mercadorias sujeitas ao + regime de substituição tributária""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.h030" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + VL_ICMS_OP = fields.Float( + string="Valor médio unitário do ICMS OP", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + VL_BC_ICMS_ST = fields.Float( + string="Valor médio unitário da base de cálculo do ICMS ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + VL_ICMS_ST = fields.Float( + string="Valor médio unitário do ICMS ST", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + VL_FCP = fields.Float( + string="Valor médio unitário do FCP", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + reg_H030_ids_RegistroH010_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.h010", + string="Inventário", + required=True, + ondelete="cascade", + ) + + +class RegistroK010(models.AbstractModel): + "Informação sobre o tipo de leiaute (simplificado / completo)" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k010" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_TP_LEIAUTE = fields.Char( + string="Indicador de tipo de leiaute adotado", + sped_length="1*", + help=( + "Indicador de tipo de leiaute adotado: 0- Leiaute simplificado 1- Leiaute " + "completo 2- Leiaute restrito aos saldos de estoque" + ), + ) + + +class RegistroK100(models.AbstractModel): + "Período de Apuração do ICMS/IPI" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k100" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + DT_INI = fields.Date( + string="Data inicial a que a apuração se refere", sped_length="8" + ) + + DT_FIN = fields.Date( + string="Data final a que a apuração se refere", sped_length="8" + ) + + reg_K200_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k200", + "reg_K200_ids_RegistroK100_id", + string="K200 Estoque Escriturado", + sped_card="1:N", + ) + + reg_K210_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k210", + "reg_K210_ids_RegistroK100_id", + string="K210 Desmontagem de mercadorias – Item de Origem", + sped_card="1:N", + ) + + reg_K220_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k220", + "reg_K220_ids_RegistroK100_id", + string="K220 Outras Movimentações Internas", + sped_card="1:N", + help="K220 Outras Movimentações Internas entre Mercadorias", + ) + + reg_K230_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k230", + "reg_K230_ids_RegistroK100_id", + string="K230 Itens Produzidos", + sped_card="1:N", + ) + + reg_K250_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k250", + "reg_K250_ids_RegistroK100_id", + string="K250 Industrialização Efetuada", + sped_card="1:N", + help="K250 Industrialização Efetuada por Terceiros – Itens Produzidos", + ) + + reg_K260_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k260", + "reg_K260_ids_RegistroK100_id", + string="K260 Reprocessamento/Reparo de Produto/Insumo", + sped_card="1:N", + ) + + reg_K270_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k270", + "reg_K270_ids_RegistroK100_id", + string="K270 Correção de Apontamento dos Registros K210", + sped_card="1:N", + help=( + "K270 Correção de Apontamento dos Registros K210, K220, K230, K250, K260, " + "K291, K292, K301 e K302" + ), + ) + + reg_K280_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k280", + "reg_K280_ids_RegistroK100_id", + string="K280 Correção de Apontamento – Estoque Escriturado", + sped_card="1:N", + ) + + reg_K290_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k290", + "reg_K290_ids_RegistroK100_id", + string="K290 Produção Conjunta – Ordem de Produção", + sped_card="1:N", + ) + + +class RegistroK200(models.AbstractModel): + "Estoque Escriturado" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k200" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_EST = fields.Date(string="Data do estoque final", sped_length="8") + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade em estoque", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + IND_EST = fields.Char( + string="Indicador do tipo de estoque", + sped_length="1", + help=( + "Indicador do tipo de estoque: 0 = Estoque de propriedade do informante e " + "em seu poder 1 = Estoque de propriedade do informante e em posse de " + "terceiros 2 = Estoque de propriedade de terceiros e em posse do informante" + ), + ) + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help="Código do participante (campo 02 do Registro 0150):", + ) + + reg_K200_ids_RegistroK100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k100", + string="Período de Apuração do ICMS/IPI", + required=True, + ondelete="cascade", + ) + + +class RegistroK210(models.AbstractModel): + "Desmontagem de mercadorias – Item de Origem" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k210" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_INI_OS = fields.Date( + string="Data de início da ordem de serviço", sped_length="8*" + ) + + DT_FIN_OS = fields.Date( + string="Data de conclusão da ordem de serviço", sped_length="8*" + ) + + COD_DOC_OS = fields.Char( + string="Código de identificação da ordem de serviço", sped_length="3" + ) + + COD_ITEM_ORI = fields.Char( + string="Código do item de origem", + sped_length="6", + help="Código do item de origem (campo 02 do Registro 0200)", + ) + + QTD_ORI = fields.Float( + string="Quantidade de origem – saída do estoque", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + reg_K210_ids_RegistroK100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k100", + string="Período de Apuração do ICMS/IPI", + required=True, + ondelete="cascade", + ) + + reg_K215_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k215", + "reg_K215_ids_RegistroK210_id", + string="K215 Desmontagem de mercadorias – Item de Destino", + sped_card="1:N", + ) + + +class RegistroK215(models.AbstractModel): + "Desmontagem de mercadorias – Item de Destino" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k215" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_ITEM_DES = fields.Char( + string="Código do item de destino", + sped_length="6", + help="Código do item de destino (campo 02 do Registro 0200)", + ) + + QTD_DES = fields.Float( + string="Quantidade de destino – entrada em estoque", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + reg_K215_ids_RegistroK210_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k210", + string="Desmontagem de mercadorias – Item de Origem", + required=True, + ondelete="cascade", + ) + + +class RegistroK220(models.AbstractModel): + "Outras Movimentações Internas entre Mercadorias" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k220" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_MOV = fields.Date(string="Data da movimentação interna", sped_length="8") + + COD_ITEM_ORI = fields.Char( + string="Código do item de origem", + sped_length="6", + help="Código do item de origem (campo 02 do Registro 0200)", + ) + + COD_ITEM_DEST = fields.Char( + string="Código do item de destino", + sped_length="6", + help="Código do item de destino (campo 02 do Registro 0200)", + ) + + QTD_ORI = fields.Float( + string="Quantidade movimentada do item de origem", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + QTD_DEST = fields.Float( + string="Quantidade movimentada do item de destino", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + reg_K220_ids_RegistroK100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k100", + string="Período de Apuração do ICMS/IPI", + required=True, + ondelete="cascade", + ) + + +class RegistroK230(models.AbstractModel): + "Itens Produzidos" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k230" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_INI_OP = fields.Date( + string="Data de início da ordem de produção", sped_length="8" + ) + + DT_FIN_OP = fields.Date( + string="Data de conclusão da ordem de produção", sped_length="8" + ) + + COD_DOC_OP = fields.Char( + string="Código de identificação da ordem de produção", sped_length="3" + ) + + COD_ITEM = fields.Char( + string="Código do item produzido", + sped_length="6", + help="Código do item produzido (campo 02 do Registro 0200)", + ) + + QTD_ENC = fields.Float( + string="Quantidade de produção acabada", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + reg_K230_ids_RegistroK100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k100", + string="Período de Apuração do ICMS/IPI", + required=True, + ondelete="cascade", + ) + + reg_K235_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k235", + "reg_K235_ids_RegistroK230_id", + string="K235 Insumos Consumidos", + sped_card="1:N", + ) + + +class RegistroK235(models.AbstractModel): + "Insumos Consumidos" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k235" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + DT_SAIDA = fields.Date( + string="Data de saída do estoque para alocação ao produto", sped_length="8" + ) + + COD_ITEM = fields.Char( + string="Código do item componente/insumo", + sped_length="6", + help="Código do item componente/insumo (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade consumida do item", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + COD_INS_SUBST = fields.Char( + string="Código do insumo que foi substituído", + sped_length="6", + help=( + "Código do insumo que foi substituído, caso ocorra a substituição (campo 02" + " do Registro 0210)" + ), + ) + + reg_K235_ids_RegistroK230_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k230", + string="Itens Produzidos", + required=True, + ondelete="cascade", + ) + + +class RegistroK250(models.AbstractModel): + "Industrialização Efetuada por Terceiros – Itens Produzidos" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k250" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_PROD = fields.Date( + string="Data do reconhecimento da produção ocorrida", + sped_length="8", + help="Data do reconhecimento da produção ocorrida no terceiro", + ) + + COD_ITEM = fields.Char( + string="Código do item produzido", + sped_length="6", + help="Código do item produzido (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade produzida", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + reg_K250_ids_RegistroK100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k100", + string="Período de Apuração do ICMS/IPI", + required=True, + ondelete="cascade", + ) + + reg_K255_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k255", + "reg_K255_ids_RegistroK250_id", + string="K255 Industrialização", + sped_card="1:N", + help="K255 Industrialização em Terceiros – Insumos Consumidos", + ) + + +class RegistroK255(models.AbstractModel): + "Industrialização em Terceiros – Insumos Consumidos" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k255" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + DT_CONS = fields.Date( + string="Data do reconhecimento do consumo", + sped_length="8", + help=( + "Data do reconhecimento do consumo do insumo referente ao produto informado" + " no campo 04 do Registro K250" + ), + ) + + COD_ITEM = fields.Char( + string="Código do insumo", + sped_length="6", + help="Código do insumo (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade de consumo do insumo", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + COD_INS_SUBST = fields.Char( + string="Código do insumo que foi substituído", + sped_length="6", + help=( + "Código do insumo que foi substituído, caso ocorra a substituição (campo 02" + " do Registro 0210)" + ), + ) + + reg_K255_ids_RegistroK250_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k250", + string="Industrialização Efetuada", + required=True, + ondelete="cascade", + help="Industrialização Efetuada por Terceiros – Itens Produzidos", + ) + + +class RegistroK260(models.AbstractModel): + "Reprocessamento/Reparo de Produto/Insumo" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k260" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_OP_OS = fields.Char( + string="Código de identificação da ordem de produção", + sped_length="3", + help=( + "Código de identificação da ordem de produção, no reprocessamento, ou da " + "ordem de serviço, no reparo" + ), + ) + + COD_ITEM = fields.Char( + string="Código do produto/insumo", + sped_length="6", + help=( + "Código do produto/insumo a ser reprocessado/reparado ou já " + "reprocessado/reparado (campo 02 do Registro 0200)" + ), + ) + + DT_SAIDA = fields.Date(string="Data de saída do estoque", sped_length="8*") + + QTD_SAIDA = fields.Float( + string="Quantidade de saída do estoque", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + DT_RET = fields.Date( + string="Data de retorno ao estoque (entrada)", sped_length="8*" + ) + + QTD_RET = fields.Float( + string="Quantidade de retorno ao estoque", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help="Quantidade de retorno ao estoque (entrada)", + ) + + reg_K260_ids_RegistroK100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k100", + string="Período de Apuração do ICMS/IPI", + required=True, + ondelete="cascade", + ) + + reg_K265_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k265", + "reg_K265_ids_RegistroK260_id", + string="K265", + sped_card="1:N", + help="K265 Reprocessamento/Reparo – Mercadorias Consumidas e/ou Retornadas", + ) + + +class RegistroK265(models.AbstractModel): + "Reprocessamento/Reparo – Mercadorias Consumidas e/ou Retornadas" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k265" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_ITEM = fields.Char( + string="Código da mercadoria", + sped_length="6", + help="Código da mercadoria (campo 02 do Registro 0200)", + ) + + QTD_CONS = fields.Float( + string="Quantidade consumida – saída do estoque", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + QTD_RET = fields.Float( + string="Quantidade retornada – entrada em estoque", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + reg_K265_ids_RegistroK260_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k260", + string="Reprocessamento/Reparo de Produto/Insumo", + required=True, + ondelete="cascade", + ) + + +class RegistroK270(models.AbstractModel): + """Correção de Apontamento dos Registros K210, K220, K230, K250, K260, + K291, K292, K301 e K302""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k270" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_INI_AP = fields.Date( + string="Data inicial do período de apuração em que ocorreu", + sped_length="8*", + help=( + "Data inicial do período de apuração em que ocorreu o apontamento que está " + "sendo corrigido" + ), + ) + + DT_FIN_AP = fields.Date( + string="Data final do período de apuração em que ocorreu", + sped_length="8*", + help=( + "Data final do período de apuração em que ocorreu o apontamento que está " + "sendo corrigido" + ), + ) + + COD_OP_OS = fields.Char( + string="Código de identificação da ordem de produção", + sped_length="3", + help=( + "Código de identificação da ordem de produção ou da ordem de serviço que " + "está sendo corrigida" + ), + ) + + COD_ITEM = fields.Char( + string="Código da mercadoria que está sendo corrigido", + sped_length="6", + help=( + "Código da mercadoria que está sendo corrigido (campo 02 do Registro 0200)" + ), + ) + + QTD_COR_POS = fields.Float( + string="Quantidade de correção positiva", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Quantidade de correção positiva de apontamento ocorrido em período de " + "apuração anterior" + ), + ) + + QTD_COR_NEG = fields.Float( + string="Quantidade de correção negativa", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Quantidade de correção negativa de apontamento ocorrido em período de " + "apuração anterior" + ), + ) + + ORIGEM = fields.Char( + string="1", + sped_length="1", + help=( + "1 - correção de apontamento de produção e/ou consumo relativo aos " + "Registros K230/K235 2 - correção de apontamento de produção e/ou consumo " + "relativo aos Registros K250/K255 3 - correção de apontamento de " + "desmontagem e/ou consumo relativo aos Registros K210/K215 4 - correção de " + "apontamento de reprocessamento/reparo e/ou consumo relativo aos Registros " + "K260/K265 5 - correção de apontamento de movimentação interna relativo ao " + "Registro K220 6 – correção de apontamento de produção relativo ao Registro" + " K291 7 – correção de apontamento de consumo relativo ao Registro K292 8 –" + " correção de apontamento de produção relativo ao Registro K301 9 – " + "correção de apontamento de consumo relativo ao Registro K302" + ), + ) + + reg_K270_ids_RegistroK100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k100", + string="Período de Apuração do ICMS/IPI", + required=True, + ondelete="cascade", + ) + + reg_K275_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k275", + "reg_K275_ids_RegistroK270_id", + string="K275 Correção de Apontamento e Retorno de Insumos", + sped_card="1:N", + help=( + "K275 Correção de Apontamento e Retorno de Insumos dos Registros K215, " + "K220, K235, K255 e K265" + ), + ) + + +class RegistroK275(models.AbstractModel): + """Correção de Apontamento e Retorno de Insumos dos Registros K215, K220, + K235, K255 e K265""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k275" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_ITEM = fields.Char( + string="Código da mercadoria", + sped_length="6", + help="Código da mercadoria (campo 02 do Registro 0200)", + ) + + QTD_COR_POS = fields.Float( + string="Quantidade de correção positiva", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Quantidade de correção positiva de apontamento ocorrido em período de " + "apuração anterior" + ), + ) + + QTD_COR_NEG = fields.Float( + string="Quantidade de correção negativa", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + help=( + "Quantidade de correção negativa de apontamento ocorrido em período de " + "apuração anterior" + ), + ) + + COD_INS_SUBST = fields.Char( + string="Código do insumo que foi substituído", + sped_length="6", + help=( + "Código do insumo que foi substituído, caso ocorra a substituição, relativo" + " aos Registros K235/K255." + ), + ) + + reg_K275_ids_RegistroK270_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k270", + string="Correção de Apontamento dos Registros K210", + required=True, + ondelete="cascade", + help=( + "Correção de Apontamento dos Registros K210, K220, K230, K250, K260, K291, " + "K292, K301 e K302" + ), + ) + + +class RegistroK280(models.AbstractModel): + "Correção de Apontamento – Estoque Escriturado" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k280" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_EST = fields.Date( + string="Data do estoque final escriturado", + sped_length="8*", + help="Data do estoque final escriturado que está sendo corrigido", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + QTD_COR_POS = fields.Float( + string="Quantidade de correção positiva", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Quantidade de correção positiva de apontamento ocorrido em período de " + "apuração anterior" + ), + ) + + QTD_COR_NEG = fields.Float( + string="Quantidade de correção negativa", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Quantidade de correção negativa de apontamento ocorrido em período de " + "apuração anterior" + ), + ) + + IND_EST = fields.Char( + string="Indicador do tipo de estoque", + sped_length="1", + help=( + "Indicador do tipo de estoque: 0 = Estoque de propriedade do informante e " + "em seu poder 1 = Estoque de propriedade do informante e em posse de " + "terceiros 2 = Estoque de propriedade de terceiros e em posse do informante" + ), + ) + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - " + "proprietário/possuidor que não seja o informante do arquivo" + ), + ) + + reg_K280_ids_RegistroK100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k100", + string="Período de Apuração do ICMS/IPI", + required=True, + ondelete="cascade", + ) + + +class RegistroK290(models.AbstractModel): + "Produção Conjunta – Ordem de Produção" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k290" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_INI_OP = fields.Date( + string="Data de início da ordem de produção", sped_length="8" + ) + + DT_FIN_OP = fields.Date( + string="Data de conclusão da ordem de produção", sped_length="8" + ) + + COD_DOC_OP = fields.Char( + string="Código de identificação da ordem de produção", sped_length="3" + ) + + reg_K290_ids_RegistroK100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k100", + string="Período de Apuração do ICMS/IPI", + required=True, + ondelete="cascade", + ) + + reg_K291_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k291", + "reg_K291_ids_RegistroK290_id", + string="K291 Produção Conjunta – Itens Produzidos", + sped_card="1:N", + ) + + reg_K292_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k292", + "reg_K292_ids_RegistroK290_id", + string="K292 Produção Conjunta – Insumos Consumidos", + sped_card="1:N", + ) + + reg_K301_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k301", + "reg_K301_ids_RegistroK290_id", + string="K301 Produção Conjunta – Industrialização Efetuada", + sped_card="1:N", + help=( + "K301 Produção Conjunta – Industrialização Efetuada por Terceiros – Itens " + "Produzidos" + ), + ) + + reg_K302_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.k302", + "reg_K302_ids_RegistroK290_id", + string="K302 Produção Conjunta – Industrialização Efetuada", + sped_card="1:N", + help=( + "K302 Produção Conjunta – Industrialização Efetuada por Terceiros – Insumos" + " Consumidos" + ), + ) + + +class RegistroK291(models.AbstractModel): + "Produção Conjunta – Itens Produzidos" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k291" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_ITEM = fields.Char( + string="Código do item produzido", + sped_length="6", + help="Código do item produzido (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade de produção acabada", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + reg_K291_ids_RegistroK290_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k290", + string="Produção Conjunta – Ordem de Produção", + required=True, + ondelete="cascade", + ) + + +class RegistroK292(models.AbstractModel): + "Produção Conjunta – Insumos Consumidos" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k292" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_ITEM = fields.Char( + string="Código do insumo/componente consumido", + sped_length="6", + help="Código do insumo/componente consumido (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade consumida", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + reg_K292_ids_RegistroK290_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k290", + string="Produção Conjunta – Ordem de Produção", + required=True, + ondelete="cascade", + ) + + +class RegistroK301(models.AbstractModel): + """Produção Conjunta – Industrialização Efetuada por Terceiros – Itens + Produzidos""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k301" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_ITEM = fields.Char( + string="Código do item produzido", + sped_length="6", + help="Código do item produzido (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade produzida", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + reg_K301_ids_RegistroK290_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k290", + string="Produção Conjunta – Ordem de Produção", + required=True, + ondelete="cascade", + ) + + +class RegistroK302(models.AbstractModel): + """Produção Conjunta – Industrialização Efetuada por Terceiros – Insumos + Consumidos""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.k302" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_ITEM = fields.Char( + string="Código do insumo", + sped_length="6", + help="Código do insumo (campo 02 do Registro 0200)", + ) + + QTD = fields.Float( + string="Quantidade consumida", + xsd_type="TDec_1606", + digits=( + 16, + 6, + ), + ) + + reg_K302_ids_RegistroK290_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.k290", + string="Produção Conjunta – Ordem de Produção", + required=True, + ondelete="cascade", + ) + + +class Registro1010(models.AbstractModel): + "Obrigatoriedade de registros do Bloco 1" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1010" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_EXP = fields.Char( + string="Reg", + sped_length="1*", + help=( + "Reg. 1100 - Ocorreu averbação (conclusão) de exportação no período: S - " + "Sim N - Não" + ), + ) + + IND_CCRF = fields.Char( + string="Reg 1200", + sped_length="1*", + help="Reg 1200 - Existem informações acerca de créditos de ICMS a serem", + ) + + IND_COMB = fields.Char( + string="Reg (IND_COMB)", + sped_length="1*", + help=( + "Reg. 1300 - É comércio varejista de combustíveis com movimentação e/ou " + "estoque no período: S - Sim N - Não" + ), + ) + + IND_USINA = fields.Char( + string="Reg (IND_USINA)", + sped_length="1*", + help=( + "Reg. 1390 - Usinas de açúcar e/álcool - O estabelecimento é produtor de " + "açúcar e/ou álcool carburante com movimentação e/ou estoque no período: S " + "- Sim N - Não" + ), + ) + + IND_VA = fields.Char( + string="Reg 1400", + sped_length="1*", + help=( + "Reg 1400 - Sendo o registro obrigatório em sua Unidade de Federação, " + "existem informações a serem prestadas neste registro: S - Sim N - Não" + ), + ) + + IND_EE = fields.Char( + string="Reg 1500", + sped_length="1*", + help=( + "Reg 1500 - A empresa é distribuidora de energia e ocorreu fornecimento de " + "energia elétrica para consumidores de outra UF: S - Sim N - Não" + ), + ) + + IND_CART = fields.Char( + string="Reg 1601", + sped_length="1*", + help=( + "Reg 1601 - Realizou vendas com instrumentos eletrônicos de pagamento: S - " + "Sim N - Não" + ), + ) + + IND_FORM = fields.Char( + string="Reg (IND_FORM)", + sped_length="1*", + help=( + "Reg. 1700 - Foram emitidos documentos fiscais em papel no período em " + "unidade da federação que exija o controle de utilização de documentos " + "fiscais: S - Sim N - Não" + ), + ) + + IND_AER = fields.Char( + string="Reg 1800 – A empresa prestou serviços", + sped_length="1*", + help=( + "Reg 1800 – A empresa prestou serviços de transporte aéreo de cargas e de " + "passageiros: S - Sim N - Não" + ), + ) + + IND_GIAF1 = fields.Char( + string="Reg (IND_GIAF1)", + sped_length="1*", + help="Reg. 1960 - Possui informações GIAF1? S – Sim; N – Não.", + ) + + IND_GIAF3 = fields.Char( + string="Reg (IND_GIAF3)", + sped_length="1*", + help="Reg. 1970 - Possui informações GIAF3? S – Sim; N – Não.", + ) + + IND_GIAF4 = fields.Char( + string="Reg (IND_GIAF4)", + sped_length="1*", + help="Reg. 1980 - Possui informações GIAF4? S – Sim; N – Não.", + ) + + IND_REST_RESSARC_COMPL_ICMS = fields.Char( + string="Reg (IND_REST_RESSARC_COMPL_ICMS)", + sped_length="1*", + help=( + "Reg. 1250 – Possui informações consolidadas de saldos de restituição, " + "ressarcimento e complementação do ICMS? S – Sim; N – Não." + ), + ) + + +class Registro1100(models.AbstractModel): + "Registro de Informações sobre Exportação" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1100" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_DOC = fields.Char( + string="Informe o tipo de documento", + xsd_type="numeric_code", + sped_length="1*", + help=( + "Informe o tipo de documento: 0 - Declaração de Exportação 1 - Declaração " + "Simplificada de Exportação 2 - Declaração Única de Exportação" + ), + ) + + NRO_DE = fields.Char(string="Número da declaração", sped_length="14") + + DT_DE = fields.Date(string="Data da declaração (DDMMAAAA)", sped_length="8*") + + NAT_EXP = fields.Char( + string="Preencher", + xsd_type="numeric_code", + sped_length="1*", + help="Preencher com:", + ) + + NRO_RE = fields.Char( + string="Nº do registro de Exportação", xsd_type="numeric_code", sped_length="12" + ) + + DT_RE = fields.Date( + string="Data do Registro de Exportação", + sped_length="8*", + help="Data do Registro de Exportação (DDMMAAAA)", + ) + + CHC_EMB = fields.Char(string="Nº do conhecimento de embarque", sped_length="18") + + DT_CHC = fields.Date( + string="Data do conhecimento de embarque", + sped_length="8*", + help="Data do conhecimento de embarque (DDMMAAAA)", + ) + + DT_AVB = fields.Date( + string="Data da averbação da Declaração de exportação", + sped_length="8*", + help="Data da averbação da Declaração de exportação (ddmmaaaa)", + ) + + TP_CHC = fields.Char( + string="Informação do tipo de conhecimento de embarque ", + xsd_type="numeric_code", + sped_length="2*", + help=( + "Informação do tipo de conhecimento de embarque : 01 - AWB; 02 - MAWB; 03 -" + " HAWB; 04 - COMAT; 06 - R. EXPRESSAS; 07 - ETIQ. REXPRESSAS; 08 - HR. " + "EXPRESSAS; 09 - AV7; 10 - BL; 11 - MBL; 12 - HBL; 13 - CRT; 14 - DSIC; 16 " + "- COMAT BL; 17 - RWB; 18 - HRWB; 19 - TIF/DTA; 20 - CP2; 91 - NÂO IATA; 92" + " - MNAO IATA; 93 - HNAO IATA; 99 - OUTROS." + ), + ) + + PAIS = fields.Char( + string="Código do país de destino da mercadoria", + xsd_type="numeric_code", + sped_length="3", + help=( + "Código do país de destino da mercadoria (Preencher conforme tabela do " + "SISCOMEX)" + ), + ) + + reg_1105_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1105", + "reg_1105_ids_Registro1100_id", + string="1105 Documentos Fiscais de Exportação", + sped_card="1:N", + ) + + +class Registro1105(models.AbstractModel): + "Documentos Fiscais de Exportação" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1105" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + COD_MOD = fields.Char( + string="Código do modelo da NF", + sped_length="2*", + help="Código do modelo da NF, conforme tabela 4.1.1", + ) + + SERIE = fields.Char(string="Série da Nota Fiscal", sped_length="3") + + NUM_DOC = fields.Char( + string="Número de Nota Fiscal de Exportação emitida", + xsd_type="numeric_code", + sped_length="9", + help="Número de Nota Fiscal de Exportação emitida pelo Exportador", + ) + + CHV_NFE = fields.Char( + string="Chave da Nota Fiscal Eletrônica", + xsd_type="numeric_code", + sped_length="44*", + ) + + DT_DOC = fields.Date(string="Data da emissão da NF de exportação", sped_length="8*") + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + reg_1105_ids_Registro1100_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1100", + string="Registro de Informações sobre Exportação", + required=True, + ondelete="cascade", + ) + + reg_1110_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1110", + "reg_1110_ids_Registro1105_id", + string="1110 Operações de Exportação Indireta", + sped_card="1:N", + help="1110 Operações de Exportação Indireta - Mercadorias de terceiros", + ) + + +class Registro1110(models.AbstractModel): + "Operações de Exportação Indireta - Mercadorias de terceiros" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1110" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante - fornecedor da mercadoria destinada à exportação " + "(campo 02 do Registro 0150)" + ), + ) + + COD_MOD = fields.Char( + string="Código do documento fiscal", + sped_length="2*", + help="Código do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char( + string="Série do documento fiscal recebido", + sped_length="4", + help="Série do documento fiscal recebido com fins específicos de exportação", + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal recebido", + xsd_type="numeric_code", + sped_length="9", + help=("Número do documento fiscal recebido com fins específicos de exportação"), + ) + + DT_DOC = fields.Date( + string="Data da emissão do documento fiscal recebido", + sped_length="8*", + help=( + "Data da emissão do documento fiscal recebido com fins específicos de " + "exportação" + ), + ) + + CHV_NFE = fields.Char( + string="Chave da Nota Fiscal Eletrônica", + xsd_type="numeric_code", + sped_length="44*", + ) + + NR_MEMO = fields.Integer(string="Número do Memorando de Exportação") + + QTD = fields.Float( + string="Quantidade do item efetivamente exportado", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + reg_1110_ids_Registro1105_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1105", + string="Documentos Fiscais de Exportação", + required=True, + ondelete="cascade", + ) + + +class Registro1200(models.AbstractModel): + "Controle de Créditos Fiscais - ICMS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1200" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_AJ_APUR = fields.Char( + string="Código de ajuste", + sped_length="8*", + help="Código de ajuste, conforme informado na tabela indicada no item 5.1.1", + ) + + SLD_CRED = fields.Float( + string="Saldo de créditos fiscais de períodos anteriores", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + CRED_APR = fields.Float( + string="Total de crédito apropriado no mês", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + CRED_RECEB = fields.Float( + string="Total de créditos recebidos por transferência", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + CRED_UTIL = fields.Float( + string="Total de créditos utilizados no período", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + SLD_CRED_FIM = fields.Float( + string="Saldo de crédito fiscal acumulado", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Saldo de crédito fiscal acumulado a transportar para o período seguinte" + ), + ) + + reg_1210_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1210", + "reg_1210_ids_Registro1200_id", + string="1210 Utilização de Créditos Fiscais", + sped_card="1:N", + help="1210 Utilização de Créditos Fiscais - ICMS", + ) + + +class Registro1210(models.AbstractModel): + "Utilização de Créditos Fiscais - ICMS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1210" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + TIPO_UTIL = fields.Char( + string="Tipo de utilização do crédito", + sped_length="4*", + help="Tipo de utilização do crédito, conforme tabela indicada no item 5.5", + ) + + NR_DOC = fields.Char(string="Número do documento utilizado na baixa de créditos") + + VL_CRED_UTIL = fields.Monetary( + string="Total de crédito utilizado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CHV_DOCE = fields.Char( + string="Chave do Documento Eletrônico", + xsd_type="numeric_code", + sped_length="44*", + ) + + reg_1210_ids_Registro1200_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1200", + string="Controle de Créditos Fiscais - ICMS", + required=True, + ondelete="cascade", + ) + + +class Registro1250(models.AbstractModel): + """Informações consolidadas de saldos de restituição, ressarcimento e + complementação do ICMS""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1250" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + reg_1255_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1255", + "reg_1255_ids_Registro1250_id", + string="1255 Informações consolidadas de saldos", + sped_card="1:N", + help=( + "1255 Informações consolidadas de saldos de restituição, ressarcimento e " + "complementação do ICMS por motivo" + ), + ) + + +class Registro1255(models.AbstractModel): + """Informações consolidadas de saldos de restituição, ressarcimento e + complementação do ICMS por motivo""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1255" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + reg_1255_ids_Registro1250_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1250", + string="Informações consolidadas de saldos de restituição", + required=True, + ondelete="cascade", + help=( + "Informações consolidadas de saldos de restituição, ressarcimento e " + "complementação do ICMS" + ), + ) + + +class Registro1300(models.AbstractModel): + "Movimentação diária de combustíveis" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1300" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_ITEM = fields.Char( + string="Código do produto", help="Código do produto, constante do registro 0200" + ) + + DT_FECH = fields.Date(string="Data do fechamento da movimentação", sped_length="8*") + + ESTQ_ABERT = fields.Float( + string="Estoque no inicio do dia, em litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + VOL_ENTR = fields.Float( + string="Volume recebido no dia (em litros)", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + VOL_DISP = fields.Float( + string="Volume disponível (04 + 05)", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help="Volume disponível (04 + 05), em litros", + ) + + VOL_SAIDAS = fields.Float( + string="Volume total das saídas, em litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + ESTQ_ESCR = fields.Float( + string="Estoque escritural (06 - 07), litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + VAL_AJ_PERDA = fields.Float( + string="Valor da perda, em litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + VAL_AJ_GANHO = fields.Float( + string="Valor do ganho, em litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + reg_1310_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1310", + "reg_1310_ids_Registro1300_id", + string="1310 Movimentação diária de combustíveis", + sped_card="1:N", + help="1310 Movimentação diária de combustíveis por tanque", + ) + + +class Registro1310(models.AbstractModel): + "Movimentação diária de combustíveis por tanque" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1310" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_TANQUE = fields.Char( + string="Tanque que armazena o combustível", sped_length="3" + ) + + ESTQ_ABERT = fields.Float( + string="Estoque no início do dia, em litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + VOL_ENTR = fields.Float( + string="Volume recebido no dia (em litros)", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + VOL_DISP = fields.Float( + string="Volume disponível (03 + 04)", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help="Volume disponível (03 + 04), em litros", + ) + + VOL_SAIDAS = fields.Float( + string="Volume total das saídas, em litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + ESTQ_ESCR = fields.Float( + string="Estoque escritural(05 - 06), litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + VAL_AJ_PERDA = fields.Float( + string="Valor da perda, em litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + VAL_AJ_GANHO = fields.Float( + string="Valor do ganho, em litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + FECH_FISICO = fields.Float( + string="Volume aferido no tanque, em litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help=( + "Volume aferido no tanque, em litros. Estoque de fechamento físico do " + "tanque" + ), + ) + + CAP_TANQUE = fields.Char( + string="Capacidade de armazenagem, em litros", + xsd_type="numeric_code", + sped_length="6", + ) + + reg_1310_ids_Registro1300_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1300", + string="Movimentação diária de combustíveis", + required=True, + ondelete="cascade", + ) + + reg_1320_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1320", + "reg_1320_ids_Registro1310_id", + string="1320 Volume de vendas", + sped_card="1:N", + ) + + +class Registro1320(models.AbstractModel): + "Volume de vendas" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1320" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + NUM_BICO = fields.Integer(string="Bico ligado à bomba") + + NR_INTERV = fields.Integer(string="Número da intervenção") + + MOT_INTERV = fields.Char(string="Motivo da intervenção", sped_length="5") + + NOM_INTERV = fields.Char(string="Nome do interventor", sped_length="3") + + CNPJ_INTERV = fields.Char( + string="CNPJ da empresa responsável pela intervenção", + xsd_type="numeric_code", + sped_length="14*", + ) + + CPF_INTERV = fields.Char( + string="CPF do técnico responsável pela intervenção", + xsd_type="numeric_code", + sped_length="11*", + ) + + VAL_FECHA = fields.Float( + string="Valor da leitura final do contador", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help="Valor da leitura final do contador, no fechamento do bico.", + ) + + VAL_ABERT = fields.Float( + string="Valor da leitura inicial do contador", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help="Valor da leitura inicial do contador, na abertura do bico.", + ) + + VOL_AFERI = fields.Float( + string="Aferições da bomba, em litros", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + VOL_VENDAS = fields.Float( + string="Vendas (08 - 09 - 10 ) do bico", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + help="Vendas (08 - 09 - 10 ) do bico, em litros", + ) + + reg_1320_ids_Registro1310_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1310", + string="Movimentação diária de combustíveis por tanque", + required=True, + ondelete="cascade", + ) + + +class Registro1350(models.AbstractModel): + "Bombas" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1350" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + SERIE = fields.Char(string="Número de série da bomba") + + FABRICANTE = fields.Char(string="Nome do fabricante da bomba", sped_length="6") + + MODELO = fields.Char(string="Modelo da bomba") + + TIPO_MEDICAO = fields.Char( + string="Identificador de medição", + sped_length="1", + help="Identificador de medição: 0 - analógico 1 - digital", + ) + + reg_1360_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1360", + "reg_1360_ids_Registro1350_id", + string="1360 Lacres das bombas", + sped_card="1:N", + ) + + reg_1370_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1370", + "reg_1370_ids_Registro1350_id", + string="1370 Bicos da bomba", + sped_card="1:N", + ) + + +class Registro1360(models.AbstractModel): + "Lacres das bombas" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1360" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_LACRE = fields.Char( + string="Número do lacre associado na bomba", sped_length="2" + ) + + DT_APLICACAO = fields.Date(string="Data de aplicação do lacre", sped_length="8*") + + reg_1360_ids_Registro1350_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1350", + string="Bombas", + required=True, + ondelete="cascade", + ) + + +class Registro1370(models.AbstractModel): + "Bicos da bomba" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1370" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_BICO = fields.Char( + string="Número sequencial do bico ligado à bomba", + xsd_type="numeric_code", + sped_length="3", + ) + + COD_ITEM = fields.Char( + string="Código do produto", + sped_length="6", + help="Código do produto, constante do registro 0200", + ) + + NUM_TANQUE = fields.Char( + string="Tanque que armazena o combustível", sped_length="3" + ) + + reg_1370_ids_Registro1350_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1350", + string="Bombas", + required=True, + ondelete="cascade", + ) + + +class Registro1390(models.AbstractModel): + "Controle de produção de Usina" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1390" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_PROD = fields.Char( + string="Código do produto conforme tabela 5", + xsd_type="numeric_code", + sped_length="2*", + help="Código do produto conforme tabela 5.8", + ) + + reg_1391_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1391", + "reg_1391_ids_Registro1390_id", + string="1391 Produção diária da usina", + sped_card="1:1", + ) + + +class Registro1391(models.AbstractModel): + "Produção diária da usina" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1391" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_REGISTRO = fields.Date(string="Data de produção (DDMMAAAA)", sped_length="8*") + + QTD_MOID = fields.Float( + string="Quantidade de insumo esmagado", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Quantidade de insumo esmagado (toneladas)", + ) + + ESTQ_INI = fields.Float( + string="Estoque inicial (litros / kg)", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + QTD_PRODUZ = fields.Float( + string="Quantidade produzida (litros / kg)", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + ENT_ANID_HID = fields.Float( + string="Entrada de álcool anidro decorrente", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Entrada de álcool anidro decorrente da transformação do álcool hidratado " + "ou Entrada de álcool hidratado decorrente da transformação do álcool " + "anidro (litros)" + ), + ) + + OUTR_ENTR = fields.Float( + string="Outras entradas (litros / kg)", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + PERDA = fields.Float( + string="Evaporação", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Evaporação (litros) ou Quebra de peso (kg)", + ) + + CONS = fields.Float( + string="Consumo (litros)", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + SAI_ANI_HID = fields.Float( + string="Saída para transformação (litros)", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + SAIDAS = fields.Char(string="Saídas (litros / kg)") + + ESTQ_FIN = fields.Float( + string="Estoque final (litros / kg)", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + ESTQ_INI_MEL = fields.Float( + string="Estoque inicial de mel residual (kg)", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + PROD_DIA_MEL = fields.Float( + string="Produção de mel residual", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Produção de mel residual (kg) e entradas de mel (kg)", + ) + + UTIL_MEL = fields.Float( + string="Mel residual utilizado", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Mel residual utilizado (kg) e saídas de mel (kg)", + ) + + PROD_ALC_MEL = fields.Float( + string="Produção de álcool", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Produção de álcool (litros) ou açúcar (kg) proveniente do mel residual." + ), + ) + + OBS = fields.Char(string="Observações") + + COD_ITEM = fields.Char( + string="insumo conforme código do item", + sped_length="6", + help="insumo conforme código do item (campo 02 do Registro 0200)", + ) + + TP_RESIDUO = fields.Char( + string="Tipo de resíduo produzido", + xsd_type="numeric_code", + sped_length="2*", + help=( + "Tipo de resíduo produzido: 01 – Bagaço de cana 02 - DDG 03 – WDG 04 – (DDG" + " + WDG)" + ), + ) + + QTD_RESIDUO = fields.Float( + string="Quantidade de resíduo produzido", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Quantidade de resíduo produzido (toneladas)", + ) + + QTD_RESIDUO_DDG = fields.Float( + string="Quantidade de resíduo produzido de DDG", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Quantidade de resíduo produzido de DDG (toneladas)", + ) + + QTD_RESIDUO_WDG = fields.Float( + string="Quantidade de resíduo produzido de WDG", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Quantidade de resíduo produzido de WDG (toneladas)", + ) + + QTD_RESIDUO_CANA = fields.Float( + string="Quantidade de resíduo produzido de bagaço de cana", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Quantidade de resíduo produzido de bagaço de cana (toneladas)", + ) + + reg_1391_ids_Registro1390_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1390", + string="Controle de produção de Usina", + required=True, + ondelete="cascade", + ) + + +class Registro1400(models.AbstractModel): + "Informação sobre Valor Agregado" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1400" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_ITEM = fields.Char( + string="- IPM Código do item", + sped_length="6", + help=( + "- IPM Código do item (tabela própria da unidade da federação ou campo 02 " + "do Registro 0200)" + ), + ) + + MUN = fields.Char( + string="Código do município de origem/destino", + xsd_type="numeric_code", + sped_length="7*", + ) + + VALOR = fields.Monetary( + string="Valor mensal correspondente ao município", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + +class Registro1500(models.AbstractModel): + """Nota fiscal/Conta de energia elétrica (código 06) - Operações + Interestaduais""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1500" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_OPER = fields.Char( + string="Indicador do tipo de operação", + sped_length="1*", + help="Indicador do tipo de operação: 1 - Saída", + ) + + IND_EMIT = fields.Char( + string="Indicador do emitente do documento fiscal", + sped_length="1*", + help="Indicador do emitente do documento fiscal: 0 - Emissão própria;", + ) + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - do adquirente, no " + "caso das saídas." + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + COD_SIT = fields.Char( + string="Código da situação do documento fiscal", + xsd_type="numeric_code", + sped_length="2*", + help="Código da situação do documento fiscal, conforme a tabela 4.1.2", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + COD_CONS = fields.Char( + string="Código de classe de consumo de energia elétrica", + sped_length="2*", + help=( + "Código de classe de consumo de energia elétrica ou gás: 01 - Comercial 02 " + "- Consumo Próprio 03 - Iluminação Pública 04 - Industrial 05 - Poder " + "Público 06 - Residencial 07 - Rural" + ), + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + DT_E_S = fields.Date(string="Data da entrada ou da saída", sped_length="8*") + + VL_DOC = fields.Monetary( + string="Valor total do documento fiscal", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DESC = fields.Monetary( + string="Valor total do desconto", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_FORN = fields.Monetary( + string="Valor total fornecido/consumido", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SERV_NT = fields.Monetary( + string="Valor total dos serviços não-tributados pelo ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_TERC = fields.Monetary( + string="Valor total cobrado em nome de terceiros", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_DA = fields.Monetary( + string="Valor total de despesas acessórias indicadas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total de despesas acessórias indicadas no documento fiscal", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor acumulado da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS = fields.Monetary( + string="Valor acumulado do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Valor acumulado da base de cálculo", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor acumulado da base de cálculo do ICMS substituição tributária", + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor acumulado do ICMS retido", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor acumulado do ICMS retido por substituição tributária", + ) + + COD_INF = fields.Char( + string="Código da informação complementar", + sped_length="6", + help=( + "Código da informação complementar do documento fiscal (campo 02 do " + "Registro 0450)" + ), + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + TP_LIGACAO = fields.Char( + string="Código de tipo de Ligação 1", + xsd_type="numeric_code", + sped_length="1*", + help="Código de tipo de Ligação 1 - Monofásico 2 - Bifásico 3 - Trifásico", + ) + + COD_GRUPO_TENSAO = fields.Char( + string="Código de grupo de tensão: 01 - A1", + sped_length="2*", + help=( + "Código de grupo de tensão: 01 - A1 - Alta Tensão (230kV ou mais) 02 - A2 -" + " Alta Tensão (88 a 138kV) 03 - A3 - Alta Tensão (69kV) 04 - A3a - Alta " + "Tensão (30kV a 44kV) 05 - A4 - Alta Tensão (2,3kV a 25kV) 06 - AS - Alta " + "Tensão Subterrâneo 06 07 - B1 - Residencial 07 08 - B1 - Residencial Baixa" + " Renda 08 09 - B2 - Rural 09 10 - B2 - Cooperativa de Eletrificação Rural " + "11 - B2 - Serviço Público de Irrigação 12 - B3 - Demais Classes 13 - B4a -" + " Iluminação Pública - rede de distribuição 14 - B4b - Iluminação Pública -" + " bulbo de lâmpada" + ), + ) + + reg_1510_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1510", + "reg_1510_ids_Registro1500_id", + string="1510 Itens do documento Nota fiscal/Conta", + sped_card="1:N", + help=( + "1510 Itens do documento Nota fiscal/Conta de energia elétrica (código 06)" + ), + ) + + +class Registro1510(models.AbstractModel): + """Itens do documento Nota fiscal/Conta de energia elétrica (código 06)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1510" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_ITEM = fields.Char( + string="Número sequencial do item no documento fiscal", + xsd_type="numeric_code", + sped_length="3", + ) + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + COD_CLASS = fields.Char( + string="Código de classificação do item", + xsd_type="numeric_code", + sped_length="4*", + help=( + "Código de classificação do item de energia elétrica, conforme a tabela " + "4.4.1" + ), + ) + + QTD = fields.Float( + string="Quantidade do item", + xsd_type="TDec_1603", + digits=( + 16, + 3, + ), + ) + + UNID = fields.Char( + string="Unidade do item", + sped_length="6", + help="Unidade do item (Campo 02 do registro 0190)", + ) + + VL_ITEM = fields.Monetary( + string="Valor do item", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_DESC = fields.Monetary( + string="Valor total do desconto", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CST_ICMS = fields.Char( + string="Código da Situação Tributária", + xsd_type="numeric_code", + sped_length="3*", + help=( + "Código da Situação Tributária, conforme a tabela indicada no item 4.3.1" + ), + ) + + CFOP = fields.Char( + string="Código Fiscal de Operação e Prestação", + xsd_type="numeric_code", + sped_length="4*", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + ALIQ_ICMS = fields.Float( + string="Alíquota do ICMS", + sped_length="6", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + VL_ICMS = fields.Monetary( + string="Valor do ICMS creditado/debitado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS_ST = fields.Monetary( + string="Valor da base de cálculo referente", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da base de cálculo referente à substituição tributária", + ) + + ALIQ_ST = fields.Float( + string="Alíquota do ICMS da substituição tributária", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Alíquota do ICMS da substituição tributária na unidade da federação de " + "destino" + ), + ) + + VL_ICMS_ST = fields.Monetary( + string="Valor do ICMS referente à substituição tributária", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + IND_REC = fields.Char( + string="Indicador do tipo de receita", + sped_length="1*", + help=( + "Indicador do tipo de receita: 0- Receita própria; 1- Receita de terceiros" + ), + ) + + COD_PART = fields.Char( + string="Código do participante receptor da receita", + sped_length="6", + help=( + "Código do participante receptor da receita, terceiro da operação (campo 02" + " do Registro 0150)" + ), + ) + + VL_PIS = fields.Monetary( + string="Valor do PIS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + VL_COFINS = fields.Monetary( + string="Valor da COFINS", xsd_type="TDec_1602", currency_field="brl_currency_id" + ) + + COD_CTA = fields.Char( + string="Código", help="Código da conta analítica contábil debitada/creditada" + ) + + reg_1510_ids_Registro1500_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1500", + string="Nota fiscal/Conta de energia elétrica", + required=True, + ondelete="cascade", + help=( + "Nota fiscal/Conta de energia elétrica (código 06) - Operações " + "Interestaduais" + ), + ) + + +class Registro1600(models.AbstractModel): + """Total das operações com cartão de crédito e/ou débito (válido até + 31/12/2021)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1600" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + +class Registro1601(models.AbstractModel): + """Operações com instrumentos de pagamentos eletrônicos (válido a partir de + 01/01/2022)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1601" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_PART_IP = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): identificação da " + "instituição que efetuou o pagamento" + ), + ) + + COD_PART_IT = fields.Char( + string="Código do participante (COD_PART_IT)", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): identificação do " + "intermediador da transação" + ), + ) + + TOT_VS = fields.Float( + string="Valor total bruto das vendas e/ou prestações", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Valor total bruto das vendas e/ou prestações de serviços no campo de " + "incidência do ICMS, incluindo operações com imunidade do imposto." + ), + ) + + TOT_ISS = fields.Float( + string="Valor total bruto das prestações de serviços", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Valor total bruto das prestações de serviços no campo de incidência do ISS" + ), + ) + + TOT_OUTROS = fields.Float( + string="Valor total de operações deduzido dos valores", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Valor total de operações deduzido dos valores dos campos TOT_VS e TOT_ISS." + ), + ) + + +class Registro1700(models.AbstractModel): + "Documentos fiscais utilizados" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1700" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + COD_DISP = fields.Char( + string="Código dispositivo autorizado: 00", + sped_length="2*", + help=( + "Código dispositivo autorizado: 00 - Formulário de Segurança - impressor " + "autônomo 01 - FS-DA - Formulário de Segurança para Impressão de DANFE 02 -" + " Formulário de segurança - NF-e 03 - Formulário Contínuo 04 - Blocos 05 - " + "Jogos Soltos" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do dispositivo autorizado", + sped_length="2*", + help="Código do modelo do dispositivo autorizado, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do dispositivo autorizado", sped_length="4") + + SUB = fields.Char(string="Subsérie do dispositivo autorizado", sped_length="3") + + NUM_DOC_INI = fields.Char( + string="Número inicial do dispositivo autorizado", + xsd_type="numeric_code", + sped_length="12", + ) + + NUM_DOC_FIN = fields.Char( + string="Número final do dispositivo autorizado", + xsd_type="numeric_code", + sped_length="12", + ) + + NUM_AUT = fields.Char( + string="Número da autorização", + xsd_type="numeric_code", + sped_length="6", + help="Número da autorização, conforme dispositivo autorizado", + ) + + reg_1710_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1710", + "reg_1710_ids_Registro1700_id", + string="1710 Documentos fiscais cancelados/inutilizados", + sped_card="1:N", + ) + + +class Registro1710(models.AbstractModel): + "Documentos fiscais cancelados/inutilizados" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1710" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + NUM_DOC_INI = fields.Char( + string="Número inicial do dispositivo autorizado", + xsd_type="numeric_code", + sped_length="12", + ) + + NUM_DOC_FIN = fields.Char( + string="Número final do dispositivo autorizado", + xsd_type="numeric_code", + sped_length="12", + ) + + reg_1710_ids_Registro1700_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1700", + string="Documentos fiscais utilizados", + required=True, + ondelete="cascade", + ) + + +class Registro1800(models.AbstractModel): + "DCTA - Demonstrativo de crédito do ICMS sobre transporte aéreo" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1800" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + VL_CARGA = fields.Monetary( + string="Valor das prestações cargas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor das prestações cargas (Tributado)", + ) + + VL_PASS = fields.Monetary( + string="Valor das prestações passageiros/cargas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor das prestações passageiros/cargas (Não Tributado)", + ) + + VL_FAT = fields.Monetary( + string="Valor total do faturamento (2+3)", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + IND_RAT = fields.Char( + string="Índice para rateio (2/4)", xsd_type="numeric_code", sped_length="8" + ) + + VL_ICMS_ANT = fields.Monetary( + string="Valor total dos créditos de ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS = fields.Monetary( + string="Valor da base de cálculo do ICMS", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS_APUR = fields.Monetary( + string="Valor do ICMS apurado (5 X 6)", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_BC_ICMS_APUR = fields.Monetary( + string="Valor da base de cálculo do ICMS apurada", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor da base de cálculo do ICMS apurada (5 X 7)", + ) + + VL_DIF = fields.Monetary( + string="Valor da diferença a ser levada a estorno", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor da diferença a ser levada a estorno de crédito na apuração (6 - 8)" + ), + ) + + +class Registro1900(models.AbstractModel): + "Indicador de sub-apuração do ICMS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1900" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_APUR_ICMS = fields.Char( + string="Indicador de outra apuração do ICMS", + sped_length="1*", + help=( + "Indicador de outra apuração do ICMS: 3 - APURAÇÃO 1 4 - APURAÇÃO 2 5 - " + "APURAÇÃO 3 6 - APURAÇÃO 4 7 - APURAÇÃO 5 8 - APURAÇÃO 6" + ), + ) + + DESCR_COMPL_OUT_APUR = fields.Char( + string="Descrição complementar de Outra Apuração do ICMS" + ) + + reg_1910_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1910", + "reg_1910_ids_Registro1900_id", + string="1910 Período da sub-apuração do ICMS", + sped_card="1:N", + ) + + +class Registro1910(models.AbstractModel): + "Período da sub-apuração do ICMS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1910" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + DT_INI = fields.Date(string="Data inicial da sub-apuração", sped_length="8*") + + DT_FIN = fields.Date(string="Data final da sub-apuração", sped_length="8*") + + reg_1910_ids_Registro1900_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1900", + string="Indicador de sub-apuração do ICMS", + required=True, + ondelete="cascade", + ) + + reg_1920_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1920", + "reg_1920_ids_Registro1910_id", + string="1920 Sub-apuração do ICMS", + sped_card="1:1", + ) + + +class Registro1920(models.AbstractModel): + "Sub-apuração do ICMS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1920" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 4 + + VL_TOT_TRANSF_DEBITOS_OA = fields.Monetary( + string="Valor total dos débitos por 'Saídas e prestações", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos débitos por 'Saídas e prestações com débito do imposto'" + ), + ) + + VL_TOT_AJ_DEBITOS_OA = fields.Monetary( + string="Valor total de 'Ajustes a débito'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ESTORNOS_CRED_OA = fields.Monetary( + string="Valor total de Ajustes “Estornos de créditos”", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_TOT_TRANSF_CREDITOS_OA = fields.Monetary( + string="Valor total dos créditos por 'Entradas", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help=( + "Valor total dos créditos por 'Entradas e aquisições com crédito do " + "imposto'" + ), + ) + + VL_TOT_AJ_CREDITOS_OA = fields.Monetary( + string="Valor total de 'Ajustes a crédito'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ESTORNOS_DEB_OA = fields.Monetary( + string="Valor total de Ajustes “Estornos de Débitos”", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SLD_CREDOR_ANT_OA = fields.Monetary( + string="Valor total de 'Saldo credor do período anterior'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_SLD_APURADO_OA = fields.Monetary( + string="Valor do saldo devedor apurado", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_TOT_DED = fields.Monetary( + string="Valor total de 'Deduções'", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + VL_ICMS_RECOLHER_OA = fields.Monetary( + string="Valor total de 'ICMS a recolher", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total de 'ICMS a recolher (09-10)", + ) + + VL_SLD_CREDOR_TRANSP_OA = fields.Monetary( + string="Valor total de 'Saldo credor a transportar", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + help="Valor total de 'Saldo credor a transportar para o período seguinte”", + ) + + DEB_ESP_OA = fields.Float( + string="Valores recolhidos ou a recolher", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Valores recolhidos ou a recolher, extra-apuração", + ) + + reg_1920_ids_Registro1910_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1910", + string="Período da sub-apuração do ICMS", + required=True, + ondelete="cascade", + ) + + reg_1921_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1921", + "reg_1921_ids_Registro1920_id", + string="1921 Ajuste/benefício/incentivo da sub-apuração", + sped_card="1:N", + help="1921 Ajuste/benefício/incentivo da sub-apuração do ICMS", + ) + + reg_1925_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1925", + "reg_1925_ids_Registro1920_id", + string="1925 Informações adicionais da sub-apuração", + sped_card="1:N", + help=( + "1925 Informações adicionais da sub-apuração do ICMS - Valores " + "declaratórios" + ), + ) + + reg_1926_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1926", + "reg_1926_ids_Registro1920_id", + string="1926 Obrigações do ICMS a recolher", + sped_card="1:N", + help=( + "1926 Obrigações do ICMS a recolher - Operações referentes à sub-apuração " + "do ICMS" + ), + ) + + +class Registro1921(models.AbstractModel): + "Ajuste/benefício/incentivo da sub-apuração do ICMS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1921" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + COD_AJ_APUR = fields.Char( + string="Código do ajuste da SUB-APURAÇÃO e dedução", + sped_length="8*", + help=( + "Código do ajuste da SUB-APURAÇÃO e dedução, conforme a tabela indicada no " + "item 5.1.1" + ), + ) + + DESCR_COMPL_AJ = fields.Char(string="Descrição complementar do ajuste da apuração") + + VL_AJ_APUR = fields.Monetary( + string="Valor do ajuste da apuração", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + reg_1921_ids_Registro1920_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1920", + string="Sub-apuração do ICMS", + required=True, + ondelete="cascade", + ) + + reg_1922_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1922", + "reg_1922_ids_Registro1921_id", + string="1922 Informações adicionais dos ajustes", + sped_card="1:N", + help="1922 Informações adicionais dos ajustes da sub-apuração do ICMS", + ) + + reg_1923_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1923", + "reg_1923_ids_Registro1921_id", + string="1923 Informações adicionais dos ajustes", + sped_card="1:N", + help=( + "1923 Informações adicionais dos ajustes da sub-apuração do ICMS - " + "Identificação dos documentos fiscais" + ), + ) + + +class Registro1922(models.AbstractModel): + "Informações adicionais dos ajustes da sub-apuração do ICMS" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1922" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 6 + + NUM_DA = fields.Char( + string="Número do documento de arrecadação estadual", + help="Número do documento de arrecadação estadual, se houver", + ) + + NUM_PROC = fields.Char( + string="Número do processo ao qual o ajuste está vinculado", + sped_length="6", + help="Número do processo ao qual o ajuste está vinculado, se houver", + ) + + IND_PROC = fields.Char( + string="Indicador da origem do processo", + sped_length="1*", + help=( + "Indicador da origem do processo: 0- SEFAZ 1- Justiça Federal 2- Justiça " + "Estadual 9- Outros" + ), + ) + + PROC = fields.Char( + string="Descrição resumida do processo que embasou", + help="Descrição resumida do processo que embasou o lançamento", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar") + + reg_1922_ids_Registro1921_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1921", + string="Ajuste/benefício/incentivo da sub-apuração do ICMS", + required=True, + ondelete="cascade", + ) + + +class Registro1923(models.AbstractModel): + """Informações adicionais dos ajustes da sub-apuração do ICMS - + Identificação dos documentos fiscais""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1923" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 6 + + COD_PART = fields.Char( + string="Código do participante", + sped_length="6", + help=( + "Código do participante (campo 02 do Registro 0150): - do emitente do " + "documento ou do remetente das mercadorias, no caso de entradas; - do " + "adquirente, no caso de saídas" + ), + ) + + COD_MOD = fields.Char( + string="Código do modelo do documento fiscal", + sped_length="2*", + help="Código do modelo do documento fiscal, conforme a tabela 4.1.1", + ) + + SER = fields.Char(string="Série do documento fiscal", sped_length="4") + + SUB = fields.Char( + string="Subsérie do documento fiscal", xsd_type="numeric_code", sped_length="3" + ) + + NUM_DOC = fields.Char( + string="Número do documento fiscal", xsd_type="numeric_code", sped_length="9" + ) + + DT_DOC = fields.Date(string="Data da emissão do documento fiscal", sped_length="8*") + + COD_ITEM = fields.Char( + string="Código do item", + sped_length="6", + help="Código do item (campo 02 do Registro 0200)", + ) + + VL_AJ_ITEM = fields.Monetary( + string="Valor do ajuste para a operação/item", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + CHV_DOCE = fields.Char( + string="Chave do Documento Eletrônico", + xsd_type="numeric_code", + sped_length="44*", + ) + + reg_1923_ids_Registro1921_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1921", + string="Ajuste/benefício/incentivo da sub-apuração do ICMS", + required=True, + ondelete="cascade", + ) + + +class Registro1925(models.AbstractModel): + """Informações adicionais da sub-apuração do ICMS - Valores + declaratórios""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1925" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + COD_INF_ADIC = fields.Char( + string="Código da informação adicional conforme tabela", + sped_length="8*", + help=( + "Código da informação adicional conforme tabela a ser definida pelas SEFAZ," + " conforme tabela definida no item 5.2" + ), + ) + + VL_INF_ADIC = fields.Monetary( + string="Valor referente à informação adicional", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + DESCR_COMPL_AJ = fields.Char(string="Descrição complementar do ajuste") + + reg_1925_ids_Registro1920_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1920", + string="Sub-apuração do ICMS", + required=True, + ondelete="cascade", + ) + + +class Registro1926(models.AbstractModel): + """Obrigações do ICMS a recolher - Operações referentes à sub-apuração do + ICMS""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1926" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 5 + + COD_OR = fields.Char( + string="Código da obrigação a recolher", + sped_length="3*", + help="Código da obrigação a recolher, conforme a tabela 5.4", + ) + + VL_OR = fields.Monetary( + string="Valor da obrigação a recolher", + xsd_type="TDec_1602", + currency_field="brl_currency_id", + ) + + DT_VCTO = fields.Date(string="Data de vencimento da obrigação", sped_length="8*") + + COD_REC = fields.Char( + string="Código de receita referente à obrigação", + help=( + "Código de receita referente à obrigação, próprio da unidade da federação, " + "conforme legislação estadual," + ), + ) + + NUM_PROC = fields.Char( + string="Número do processo ou auto de infração", + sped_length="6", + help=( + "Número do processo ou auto de infração ao qual a obrigação está vinculada," + " se houver." + ), + ) + + IND_PROC = fields.Char( + string="Indicador da origem do processo", + sped_length="1*", + help=( + "Indicador da origem do processo: 0- SEFAZ 1- Justiça Federal 2- Justiça " + "Estadual 9- Outros" + ), + ) + + PROC = fields.Char( + string="Descrição resumida do processo que embasou", + help="Descrição resumida do processo que embasou o lançamento", + ) + + TXT_COMPL = fields.Char(string="Descrição complementar das obrigações a recolher") + + MES_REF = fields.Char( + string="Informe o mês de referência no formato “mmaaaa”", + xsd_type="numeric_code", + sped_length="6*", + ) + + reg_1926_ids_Registro1920_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1920", + string="Sub-apuração do ICMS", + required=True, + ondelete="cascade", + ) + + +class Registro1960(models.AbstractModel): + """GIAF 1 - Guia de informação e apuração de incentivos fiscais e + financeiros: indústria (crédito presumido)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1960" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_AP = fields.Char( + string="Indicador da sub-apuração por tipo de benefício", + xsd_type="numeric_code", + sped_length="2*", + help=( + "Indicador da sub-apuração por tipo de benefício (conforme tabela 4.7.1)" + ), + ) + + G1_01 = fields.Float( + string="Percentual de crédito presumido", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G1_02 = fields.Float( + string="Saídas não incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G1_03 = fields.Float( + string="Saídas incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G1_04 = fields.Float( + string="Saídas incentivadas de PI para fora do Nordeste", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G1_05 = fields.Float( + string="Saldo devedor do ICMS antes das deduções", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Saldo devedor do ICMS antes das deduções do incentivo", + ) + + G1_06 = fields.Float( + string="Saldo devedor do ICMS relativo à faixa incentivada", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Saldo devedor do ICMS relativo à faixa incentivada de PI", + ) + + G1_07 = fields.Float( + string="Crédito presumido nas saídas incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Crédito presumido nas saídas incentivadas de PI para fora do Nordeste", + ) + + G1_08 = fields.Float( + string="Saldo devedor relativo à faixa incentivada", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Saldo devedor relativo à faixa incentivada de PI após o crédito presumido " + "nas saídas para fora do Nordeste" + ), + ) + + G1_09 = fields.Float( + string="Crédito presumido", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G1_10 = fields.Float( + string="Dedução de incentivo da Indústria", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Dedução de incentivo da Indústria (crédito presumido)", + ) + + G1_11 = fields.Float( + string="Saldo devedor do ICMS após deduções", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + +class Registro1970(models.AbstractModel): + """GIAF 3 - Guia de informação e apuração de incentivos fiscais e + financeiros: importação (diferimento na entrada e crédito presumido na + saída subsequente)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1970" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_AP = fields.Char( + string="Indicador da sub-apuração por tipo de benefício", + xsd_type="numeric_code", + sped_length="2*", + help=( + "Indicador da sub-apuração por tipo de benefício (conforme tabela 4.7.1)" + ), + ) + + G3_01 = fields.Float( + string="Importações com ICMS diferido", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G3_02 = fields.Float( + string="ICMS diferido nas importações", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G3_03 = fields.Float( + string="Saídas não incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G3_04 = fields.Float( + string="Percentual de incentivo nas saídas", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Percentual de incentivo nas saídas para fora do Estado", + ) + + G3_05 = fields.Float( + string="Saídas incentivadas de PI para fora do Estado", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G3_06 = fields.Float( + string="ICMS das saídas incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="ICMS das saídas incentivadas de PI para fora do Estado", + ) + + G3_07 = fields.Float( + string="Crédito presumido nas saídas para fora do Estado", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G3_T = fields.Float( + string="Dedução de incentivo da Importação", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Dedução de incentivo da Importação (crédito presumido)", + ) + + G3_08 = fields.Float( + string="Saldo devedor do ICMS antes das deduções", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Saldo devedor do ICMS antes das deduções do incentivo", + ) + + G3_09 = fields.Float( + string="Saldo devedor do ICMS após deduções do incentivo", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + reg_1975_ids = fields.One2many( + "l10n_br_sped.efd_icms_ipi.1975", + "reg_1975_ids_Registro1970_id", + string="1975 GIAF 3", + sped_card="1:4", + help=( + "1975 GIAF 3 - Guia de informação e apuração de incentivos fiscais e " + "financeiros: importação (saídas internas por faixa de alíquota)" + ), + ) + + +class Registro1975(models.AbstractModel): + """GIAF 3 - Guia de informação e apuração de incentivos fiscais e + financeiros: importação (saídas internas por faixa de alíquota)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1975" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 3 + + ALIQ_IMP_BASE = fields.Float( + string="Alíquota incidente sobre as importações-base", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G3_10 = fields.Float( + string="Saídas incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G3_11 = fields.Float( + string="Importações-base para o crédito presumido", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G3_12 = fields.Float( + string="Crédito presumido nas saídas internas", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + reg_1975_ids_Registro1970_id = fields.Many2one( + comodel_name="l10n_br_sped.efd_icms_ipi.1970", + string="GIAF 3", + required=True, + ondelete="cascade", + help=( + "GIAF 3 - Guia de informação e apuração de incentivos fiscais e " + "financeiros: importação (diferimento na entrada e crédito presumido na " + "saída subsequente)" + ), + ) + + +class Registro1980(models.AbstractModel): + """GIAF 4 - Guia de informação e apuração de incentivos fiscais e + financeiros: central de distribuição (entradas/saídas)""" + + _description = textwrap.dedent(f" {__doc__}") + _name = "l10n_br_sped.efd_icms_ipi.20.1980" + _inherit = "l10n_br_sped.mixin.efd_icms_ipi" + _sped_level = 2 + + IND_AP = fields.Char( + string="Indicador da sub-apuração por tipo de benefício", + xsd_type="numeric_code", + sped_length="2*", + help=( + "Indicador da sub-apuração por tipo de benefício (conforme tabela 4.7.1)" + ), + ) + + G4_01 = fields.Float( + string="Entradas (percentual de incentivo)", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G4_02 = fields.Float( + string="Entradas não incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G4_03 = fields.Float( + string="Entradas incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G4_04 = fields.Float( + string="Saídas (percentual de incentivo)", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G4_05 = fields.Float( + string="Saídas não incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G4_06 = fields.Float( + string="Saídas incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G4_07 = fields.Float( + string="Saldo devedor do ICMS antes das deduções", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help=( + "Saldo devedor do ICMS antes das deduções do incentivo (PI e itens não " + "incentivados)" + ), + ) + + G4_08 = fields.Float( + string="Crédito presumido nas entradas incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G4_09 = fields.Float( + string="Crédito presumido nas saídas incentivadas de PI", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) + + G4_10 = fields.Float( + string="Dedução de incentivo da Central de Distribuição", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + help="Dedução de incentivo da Central de Distribuição (entradas/saídas)", + ) + + G4_11 = fields.Float( + string="Saldo devedor do ICMS após deduções do incentivo", + xsd_type="TDec_1602", + digits=( + 16, + 2, + ), + ) diff --git a/spedextractor/specs/efd_pis_cofins/6/l10n_br_sped_efd_pis_cofins/models/sped_efd_pis_cofins.py b/spedextractor/specs/efd_pis_cofins/6/l10n_br_sped_efd_pis_cofins/models/sped_efd_pis_cofins.py index 7f4c062..c617be9 100644 --- a/spedextractor/specs/efd_pis_cofins/6/l10n_br_sped_efd_pis_cofins/models/sped_efd_pis_cofins.py +++ b/spedextractor/specs/efd_pis_cofins/6/l10n_br_sped_efd_pis_cofins/models/sped_efd_pis_cofins.py @@ -1,11 +1,11 @@ -# Copyright 2023 - TODAY, Akretion - Raphael Valyi +# Copyright 2025 - TODAY, Akretion - Raphael Valyi # License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). # Generated by https://github.com/akretion/sped-extractor and xsdata-odoo # ruff: noqa: E501 import textwrap -from odoo import fields, models +from odoo import models class Registro0000(models.Model): diff --git a/spedextractor/specs/efd_pis_cofins/6/l10n_br_sped_efd_pis_cofins/models/sped_efd_pis_cofins_spec_6.py b/spedextractor/specs/efd_pis_cofins/6/l10n_br_sped_efd_pis_cofins/models/sped_efd_pis_cofins_spec_6.py index 6101c00..40e0f49 100644 --- a/spedextractor/specs/efd_pis_cofins/6/l10n_br_sped_efd_pis_cofins/models/sped_efd_pis_cofins_spec_6.py +++ b/spedextractor/specs/efd_pis_cofins/6/l10n_br_sped_efd_pis_cofins/models/sped_efd_pis_cofins_spec_6.py @@ -1,4 +1,4 @@ -# Copyright 2023 - TODAY, Akretion - Raphael Valyi +# Copyright 2025 - TODAY, Akretion - Raphael Valyi # License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). # Generated by https://github.com/akretion/sped-extractor and xsdata-odoo # ruff: noqa: E501 @@ -266,7 +266,7 @@ class Registro0000(models.AbstractModel): ) TIPO_ESCRIT = fields.Char( - string="Tipo de escrituração: 0", + string="Tipo de escrituração", required=True, xsd_type="numeric_code", sped_length="1*", @@ -274,7 +274,7 @@ class Registro0000(models.AbstractModel): ) IND_SIT_ESP = fields.Char( - string="Indicador de situação especial: 0", + string="Indicador de situação especial", xsd_type="numeric_code", sped_length="1*", help=( @@ -1446,7 +1446,7 @@ class RegistroA100(models.AbstractModel): _sped_level = 3 IND_OPER = fields.Char( - string="Indicador do tipo de operação: 0", + string="Indicador do tipo de operação", required=True, sped_length="1*", help=( @@ -1658,7 +1658,7 @@ class RegistroA111(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -2331,7 +2331,7 @@ class RegistroC111(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -3147,7 +3147,7 @@ class RegistroC188(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help="Indicador da origem do processo: 1 - Justiça Federal;", @@ -3485,7 +3485,7 @@ class RegistroC198(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -4314,7 +4314,7 @@ class RegistroC489(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -4587,7 +4587,7 @@ class RegistroC499(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -4898,7 +4898,7 @@ class RegistroC509(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -5249,7 +5249,7 @@ class RegistroC609(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -5640,7 +5640,7 @@ class RegistroC830(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -5967,7 +5967,7 @@ class RegistroC890(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -6446,7 +6446,7 @@ class RegistroD111(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -6715,7 +6715,7 @@ class RegistroD209(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -6901,7 +6901,7 @@ class RegistroD309(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -7121,7 +7121,7 @@ class RegistroD359(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -7461,7 +7461,7 @@ class RegistroD509(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -7819,7 +7819,7 @@ class RegistroD609(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -8156,7 +8156,7 @@ class RegistroF111(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -8366,7 +8366,7 @@ class RegistroF129(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -8617,7 +8617,7 @@ class RegistroF139(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -8950,10 +8950,9 @@ class RegistroF200(models.AbstractModel): ) IND_NAT_EMP = fields.Char( - string="Indicador da Natureza Específica", + string="Indicador da Natureza Específica do Empreendimento", xsd_type="numeric_code", sped_length="1*", - help="Indicador da Natureza Específica do Empreendimento:", ) INF_COMP = fields.Char(string="Informações Complementares", sped_length="9") @@ -9335,7 +9334,7 @@ class RegistroF211(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -9491,7 +9490,7 @@ class RegistroF509(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -9661,7 +9660,7 @@ class RegistroF519(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -9921,7 +9920,7 @@ class RegistroF559(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -10090,7 +10089,7 @@ class RegistroF569(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -10537,7 +10536,7 @@ class RegistroI199(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", sped_length="1*", help=( "Indicador da origem do processo: 1 - Justiça Federal; 3 – Secretaria da " @@ -10639,7 +10638,7 @@ class RegistroI299(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", sped_length="1*", help=( "Indicador da origem do processo: 1 - Justiça Federal; 3 – Secretaria da " @@ -10730,7 +10729,7 @@ class RegistroI399(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", sped_length="1*", help=( "Indicador da origem do processo: 1 - Justiça Federal; 3 – Secretaria da " @@ -13632,7 +13631,7 @@ class RegistroP199(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=( @@ -15787,7 +15786,7 @@ class Registro1809(models.AbstractModel): ) IND_PROC = fields.Char( - string="Indicador da origem do processo: 1", + string="Indicador da origem do processo", required=True, sped_length="1*", help=(