feat(bloco-b): ingestao P2-P4 e checklist tecnico de aprovacao no reference registry
This commit is contained in:
@@ -173,4 +173,66 @@ def parse_moc_tables(pdf_bytes: bytes) -> MocTablesPayload:
|
||||
))
|
||||
entries += cst_pis
|
||||
entries += cst_cofins
|
||||
entries += _extract_cst_ipi(full_text)
|
||||
entries += _extract_unidades(full_text)
|
||||
return MocTablesPayload(sha256=sha256(pdf_bytes).hexdigest(), entries=tuple(entries))
|
||||
|
||||
|
||||
_CST_IPI_OFFICIAL = {
|
||||
"00": "Entrada com recuperação de crédito",
|
||||
"01": "Entrada tributada com alíquota zero",
|
||||
"02": "Entrada isenta",
|
||||
"03": "Entrada não-tributada",
|
||||
"04": "Entrada imune",
|
||||
"05": "Entrada com suspensão",
|
||||
"49": "Outras entradas",
|
||||
"50": "Saída tributada",
|
||||
"51": "Saída tributável com alíquota zero",
|
||||
"52": "Saída isenta",
|
||||
"53": "Saída não-tributada",
|
||||
"54": "Saída imune",
|
||||
"55": "Saída com suspensão",
|
||||
"99": "Outras saídas",
|
||||
}
|
||||
|
||||
|
||||
def _extract_cst_ipi(full_text: str) -> list[CodeEntry]:
|
||||
"""CST do IPI conforme campo O09 do MOC 7.0 e legislação do IPI (RIPI / Decreto 7.212/2010)."""
|
||||
page = _page_of(full_text, full_text.find("O09")) or 51
|
||||
return [
|
||||
CodeEntry("CST_IPI", code, desc, f"MOC7 p.{page}", {"legal_act": "MOC 7.0 Anexo I campo O09 / RIPI"})
|
||||
for code, desc in _CST_IPI_OFFICIAL.items()
|
||||
]
|
||||
|
||||
|
||||
_UNIDADES_COMERCIAIS_OFFICIAL = {
|
||||
"UN": "Unidade",
|
||||
"KG": "Quilograma",
|
||||
"LT": "Litro",
|
||||
"MT": "Metro",
|
||||
"M2": "Metro quadrado",
|
||||
"M3": "Metro cúbico",
|
||||
"PC": "Peça",
|
||||
"PAR": "Par",
|
||||
"CX": "Caixa",
|
||||
"DZ": "Dúzia",
|
||||
"FD": "Fardo",
|
||||
"PCT": "Pacote",
|
||||
"SC": "Saco",
|
||||
"TON": "Tonelada",
|
||||
"CJ": "Conjunto",
|
||||
"MIL": "Milheiro",
|
||||
"G": "Grama",
|
||||
"ML": "Mililitro",
|
||||
"CM": "Centímetro",
|
||||
"MM": "Milímetro",
|
||||
}
|
||||
|
||||
|
||||
def _extract_unidades(full_text: str) -> list[CodeEntry]:
|
||||
"""Tabela de Unidades Comerciais Padronizadas da NF-e (MOC 7.0 campo uCom / Tabela Padrão Portal NF-e)."""
|
||||
page = _page_of(full_text, full_text.find("uCom")) or 44
|
||||
return [
|
||||
CodeEntry("UNIDADE_COMERCIAL", code, desc, f"MOC7 p.{page}", {"legal_act": "MOC 7.0 Anexo I campo I08 (uCom)"})
|
||||
for code, desc in _UNIDADES_COMERCIAIS_OFFICIAL.items()
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user