Skip to content

Instantly share code, notes, and snippets.

@maxwellcc
Last active September 6, 2022 12:38
Show Gist options
  • Save maxwellcc/d046ed06cf2bb542f503c4e7c66814c5 to your computer and use it in GitHub Desktop.
Save maxwellcc/d046ed06cf2bb542f503c4e7c66814c5 to your computer and use it in GitHub Desktop.
XML: Processa a RPI de patentes, marcas e registros de programa de computador do INPI
# Processa patentes
def get_despachos_patentes_INPI(ip_type, Patent):
if ip_type == 'Patente':
ip_id = Patent.objects.values_list('patent_id', flat=True).filter(active=True)
if ip_id:
for despatch in doc.iterfind('despacho'):
for process in despatch.iterfind('processo-patente'):
number = process.findtext('numero')
if number in ip_id:
qtd_finded += 1
data[number] = {}
data[number]['tipo'] = ip_type
data[number]['revista'] = rpi_number
data[number]['codigo'] = despatch.findtext('codigo')
data[number]['titulo'] = despatch.findtext('titulo')
data[number]['comentario'] = despatch.findtext('comentario')
data[number]['data-deposito'] = process.findtext('data-deposito')
qtd = 0
data[number]['classificacao-internacional-lista'] = {}
for cil in process.iterfind(
'classificacao-internacional-lista/classificacao-internacional'):
qtd += 1
data[number]['classificacao-internacional-lista'][str(qtd)] = \
cil.text
qtd = 0
data[number]['prioridade-unionista-lista'] = {}
for tipoPrograma in process.iterfind(
'prioridade-unionista-lista/prioridade-unionista'):
qtd += 1
data[number]['prioridade-unionista-lista'][str(qtd)] = {}
data[number]['prioridade-unionista-lista'][str(qtd)]['sigla-pais'] = \
tipoPrograma.findtext('sigla-pais')
data[number]['prioridade-unionista-lista'][str(qtd)]['numero-prioridade'] = \
tipoPrograma.findtext('numero-prioridade')
data[number]['prioridade-unionista-lista'][str(qtd)]['data-prioridade'] = \
tipoPrograma.findtext('data-prioridade')
qtd = 0
data[number]['titular-lista'] = {}
for applicant in process.iterfind('titular-lista/titular'):
qtd += 1
data[number]['titular-lista'][str(qtd)] = applicant.findtext(
'nome-completo')
qtd = 0
data[number]['inventor-lista'] = {}
for creator in process.iterfind('inventor-lista/inventor'):
qtd += 1
data[number]['inventor-lista'][str(qtd)] = creator.findtext(
'nome-completo')
return data
def get_despachos_softwares_INPI(ip_type, Software):
if ip_type == 'Software':
ip_id = Software.objects.values_list('software_id', flat=True).filter(active=True)
if ip_id:
for despatch in doc.iterfind('despacho'):
for process in despatch.iterfind('processo-programa'):
number = process.findtext('numero')
if number in ip_id:
qtd_finded += 1
data[number] = {}
data[number]['tipo'] = ip_type
data[number]['revista'] = rpi_number
data[number]['codigo'] = despatch.findtext('codigo')
data[number]['titulo'] = despatch.findtext('titulo')
data[number]['comentario'] = despatch.findtext('comentario')
data[number]['dataCriacao'] = process.findtext('dataCriacao')
# campoAplicacaoLista
qtd = 0
data[number]['campoAplicacaoLista'] = {}
for despacho in process.iterfind(
'campoAplicacaoLista/campoAplicacao'):
qtd += 1
data[number]['campoAplicacaoLista'][str(qtd)] = \
despacho.text
# linguagemLista
qtd = 0
data[number]['linguagemLista'] = {}
for campoLinguagem in process.iterfind(
'linguagemLista/linguagem'):
qtd += 1
data[number]['linguagemLista'][str(qtd)] = \
campoLinguagem.text
# tipoProgramaLista
qtd = 0
data[number]['tipoProgramaLista'] = {}
for tipoPrograma in process.iterfind(
'tipoProgramaLista/tipoPrograma'):
qtd += 1
data[number]['tipoProgramaLista'][str(qtd)] = {}
data[number]['tipoProgramaLista'][str(qtd)]['codigo'] = \
tipoPrograma.findtext('codigo')
# titularLista
qtd = 0
data[number]['titularLista'] = {}
for applicant in process.iterfind('titularLista/titular'):
qtd += 1
data[number]['titularLista'][str(qtd)] = applicant.findtext(
'nome')
# criadorLista
qtd = 0
data[number]['criadorLista'] = {}
for creator in process.iterfind('criadorLista/criador'):
qtd += 1
data[number]['criadorLista'][str(qtd)] = creator.findtext(
'nome')
return data
def get_despachos_marcas_INPI(ip_type, Trademark):
if ip_type == 'Marca':
ip_id = Trademark.objects.values_list('trademark_id', flat=True).filter(active=True)
if ip_id:
for process in doc.iterfind('processo'):
number = process.attrib.get('numero')
if number in ip_id:
qtd_finded += 1
data[number] = {}
data[number]['tipo'] = ip_type
data[number]['revista'] = rpi_number
data[number]['data-deposito'] = process.attrib.get('data-deposito')
# dados-de-madri
# <dados-de-madri numero-inscricao-internacional="1496568" data-recebimento-inpi="07/11/2019"/>
data[number]['dados-de-madri'] = {}
for dados_de_madri in process.iterfind('dados-de-madri'):
data[number]['dados-de-madri'][
'numero-inscricao-internacional'] = dados_de_madri.attrib.get(
'numero-inscricao-internacional')
data[number]['dados-de-madri'][
'data-recebimento-inpi'] = dados_de_madri.attrib.get(
'data-recebimento-inpi')
# despachos
qtd = 0
data[number]['despachos'] = {}
for despacho in process.iterfind('despachos/despacho'):
qtd += 1
data[number]['despachos'][str(qtd)] = {}
data[number]['despachos'][str(qtd)]['codigo'] = despacho.attrib.get('codigo')
data[number]['despachos'][str(qtd)]['nome'] = despacho.attrib.get('nome')
# TODO: falta texto-complementar, protocolo (v. arquivo de exemplo)
# titulares
qtd = 0
data[number]['titulares'] = {}
for titular in process.iterfind('titulares/titular'):
qtd += 1
data[number]['titulares'][str(qtd)] = {}
data[number]['titulares'][str(qtd)]['nome-razao-social'] = titular.attrib.get(
'nome-razao-social')
data[number]['titulares'][str(qtd)]['pais'] = titular.attrib.get('pais')
data[number]['titulares'][str(qtd)]['uf'] = titular.attrib.get('uf')
# marca
data[number]['marca'] = {}
for marca in process.iterfind('marca'):
data[number]['marca']['apresentacao'] = marca.attrib.get('apresentacao')
data[number]['marca']['natureza'] = marca.attrib.get('natureza')
data[number]['marca']['nome'] = marca.findtext('nome')
# lista-classe-nice
qtd = 0
data[number]['lista-classe-nice'] = {}
for classe_nice in process.iterfind('lista-classe-nice/classe-nice'):
qtd += 1
data[number]['lista-classe-nice'][str(qtd)] = {}
data[number]['lista-classe-nice'][str(qtd)]['codigo'] = classe_nice.attrib.get(
'codigo')
data[number]['lista-classe-nice'][str(qtd)][
'especificacao'] = classe_nice.findtext('especificacao')
data[number]['lista-classe-nice'][str(qtd)][
'traducao-especificacao'] = classe_nice.findtext('traducao-especificacao')
data[number]['lista-classe-nice'][str(qtd)]['status'] = classe_nice.findtext(
'status')
# classes-vienna
qtd = 0
data[number]['classes-vienna'] = {}
for classe_vienna in process.iterfind('classes-vienna/classe-vienna'):
qtd += 1
data[number]['classes-vienna'][str(qtd)] = {}
data[number]['classes-vienna'][str(qtd)]['codigo'] = classe_vienna.attrib.get(
'codigo')
data[number]['classes-vienna'][str(qtd)]['edicao'] = classe_vienna.attrib.get(
'edicao')
# prioridade-unionista
qtd = 0
data[number]['prioridades'] = {}
for prioridade in process.iterfind('prioridade-unionista/prioridade'):
qtd += 1
data[number]['prioridades'][str(qtd)] = {}
data[number]['prioridades'][str(qtd)]['data'] = prioridade.attrib.get('data')
data[number]['prioridades'][str(qtd)]['numero'] = prioridade.attrib.get(
'numero')
data[number]['prioridades'][str(qtd)]['pais'] = prioridade.attrib.get('pais')
# sobrestadores
qtd = 0
data[number]['sobrestadores'] = {}
for sobrestador in process.iterfind('sobrestadores/sobrestador'):
qtd += 1
data[number]['sobrestadores'][str(qtd)] = {}
data[number]['sobrestadores'][str(qtd)]['processo'] = sobrestador.attrib.get(
'processo')
data[number]['sobrestadores'][str(qtd)]['marca'] = sobrestador.attrib.get(
'marca')
# procurador
data[number]['procurador'] = process.findtext('procurador')
return data
@maxwellcc
Copy link
Author

Testado no site do INPI em maio de 2020. O INPI pode alterar o formato do XML sem aviso prévio.
Não encontrei nenhum dicionário de dados, tive que fazer no 'olhômetro', por isso, não tem todos os identificadores.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment