Source code for integra

# -*- coding: utf-8 -*-
import requests
import json
import datetime
from minify import json_minify

[docs]class Integra: """ Empacota os dados e os envia para o webservice. Inicializa uma nova instância da classe com código do Token gerado pelo sistema. :param token_autenticacao: Token gerado pelo sistema, representa um coordenador ou técnico de Núcleo de Telessaúde. :type token_autenticacao: str """ def __init__(self, token_autenticacao): self.token_autenticacao = token_autenticacao @staticmethod def __to_dict(obj, classkey=None): if isinstance(obj, dict): data = {} for (k, v) in obj.items(): data[k] = Integra.__to_dict(v, classkey) return data elif hasattr(obj, "_ast"): return Integra.__to_dict(obj._ast()) elif hasattr(obj, "__iter__"): return [Integra.__to_dict(v, classkey) for v in obj] elif hasattr(obj, "__dict__"): data = dict([(key, Integra.__to_dict(value, classkey)) for key, value in obj.__dict__.iteritems() if not callable(value) and not key.startswith('_')]) if classkey is not None and hasattr(obj, "__class__"): data[classkey] = obj.__class__.__name__ return data else: return obj
[docs] def enviar_dados(self, url, dados): """ Método utilizado para enviar as informações de indicadores para o webservice. Envia o os dados para o serviço especificado na url :param url: URL do webservice :type url: str :param dados: Objeto com os dados a serem enviados :type dados: str """ if (self.token_autenticacao is not None and self.token_autenticacao is not ""): try: headers = { 'Authorization': 'Token ' + self.token_autenticacao, 'content-type' : 'application/json' } r = requests.post(url, data=dados, headers=headers) return r.json() except Exception: return "Atenção: Não foi possível conectar-se à URL informada." else: return "Atenção: Você precisa setar o token de autenticação."
@staticmethod
[docs] def serializar(dados): """Converte os indicadores no tipo do formato aceito pelo webservice. :param dados: Dados a serem serializados para JSON :type dados: IndicadorGeral ou EquipesSaude :returns: str -- dados formatados em JSON """ try: return json_minify(json.dumps(Integra.__to_dict(dados))) except Exception as e: # return "Atenção: Não foi possível serializar os dados para o formato JSON." return e.message
@staticmethod
[docs] def validate_date(date, format='%d/%m/%Y %H:%M:%S'): try: datetime.datetime.strptime(date, format) return True except ValueError: return False
[docs]class EquipesSaude: """Representa uma coleção de dados cadastrais de equipes de saúde. """ def __init__(self): self.list = []
[docs] def add(self, codigo_nucleo, codigo_equipe, codigo_equipe_ine, nome, cnes_estabelecimento, codigo_tipo_equipe): """ Adiciona os dados cadastrais de uma equipe de saúde. .. note:: Pelo menos um dos dois (codigo_equipe ou codigo_equipe_ine) deve ser informado. :param codigo_nucleo: Código de identificação do Núcleo de Telessaúde. Consulta código no sistema INTEGRA. :type codigo_nucleo: str :param codigo_equipe: Código de identificação de equipe de saúde utilizada pelo sistema de teleconsultoria (máximo 12 caracteres). :type codigo_equipe: str :param codigo_equipe_ine: Código Identificador Nacional de Equipe (INE)(máximo 12 caracteres). :type codigo_equipe_ine: str :param nome: Nome da equipe de saúde (máximo 60 caracteres). :type nome: str :param cnes_estabelecimento: Código Cadastro Nacional de Estabelecimento de Saúde (CNES). :type cnes_estabelecimento: str :param codigo_tipo_equipe: Código do tipo de equipe. Consulta código no sistema. :type codigo_tipo_equipe: str """ self.list.append({ "codigo_nucleo" : codigo_nucleo, "codigo_equipe" : codigo_equipe, "codigo_equipe_ine" : codigo_equipe_ine, "codigo_tipo_equipe" : codigo_tipo_equipe, "nome" : nome, "cnes_estabelecimento" : cnes_estabelecimento })
def _ast(self): return self.list
[docs]class ProfissionalSaude: """Classe responsável por cadastrar/atualizar os dados de profissional de saúde. Quando o SMART recebe um CPF ele tentará buscar na base e se não encontrado irá buscar na base do CNES. Esse serviço só será utilizado caso o SMART não consiga encontrar o profissional pelo CPF informado nos outros serviços. :param codigo_nucleo: Código CNES de identificação do núcleo cadastrado no SMART. :type codigo_nucleo: str :param mes_referencia: Mês de referência para os indicadores informados. :type mes_referencia: str """ def __init__(self, codigo_nucleo, mes_referencia): self.codigo_nucleo = codigo_nucleo self.mes_referencia = mes_referencia self.profissionais = []
[docs] def addProfissionalSaude(self, codigo_cns, codigo_cpf, nome, estabelecimento, ocupacao, equipe_ine, tipo_profissional, sexo): """ Adicona os dados básicos do profissional de saúde e seu respectivo vínculo. :param codigo_cns: (opcional) CNS do profissional :type codigo_cns: str :param codigo_cpf: CPF do profissional :type codigo_cpf: str :param nome: Nome do profissional :type nome: str :param estabelecimento: Código CNES do estabelecimento de saúde no qual o profissional solicitante atua :type estabelecimento: str :param ocupacao: Código CBO da ocupação. Consultar lista de CBOs disponível no SMART através do menu "Cadastros Gerais > Especialidades (CBO)". :type ocupacao: str :param equipe_ine: (opcional) Código INE da equipe de saúde da qual o profissional faz parte :type equipe_ine: str :param tipo_profissional: Código do tipo de profissional. Consultar lista de tipos de profissionais disponível no SMART através do menu "Cadastros Gerais > Tipos de Profissionais". :type tipo_profissional: str :param sexo: Sexo do profissional de saúde :type sexo: str """ self.profissionais.append({ "cns": codigo_cns, "cpf": codigo_cpf, "nome": nome, "cnes": estabelecimento, "cbo": ocupacao, "ine": equipe_ine, "tprof": tipo_profissional, "sexo": sexo })
[docs]class EstabelecimentoSaude: """Classe responsável por atualizar os estabelecimentos de saúde quanto ao serviço consumido. :param codigo_nucleo: Código CNES de identificação do núcleo cadastrado no SMART. :type codigo_nucleo: str :param mes_referencia: Mês de referência para os indicadores informados. :type mes_referencia: str """ def __init__(self, codigo_nucleo, mes_referencia): self.codigo_nucleo = codigo_nucleo self.mes_referencia = mes_referencia self.estabelecimentos = []
[docs] def atualizarEstabelecimentoSaude(self, codigo_cnes, cadastrado_servico_teleconsultoria, cadastrado_servico_teleeducacao, cadastrado_servico_telediagnostico): """ Adiciona o estabelecimento de saúde que será atualizado. :param codigo_cnes: Código CNES do estabelecimento de saúde no qual o profissional solicitante atua :type codigo_cnes: str :param cadastrado_servico_teleconsultoria: Se o estabelecimento consome serviço de Teleconsultoria :type cadastrado_servico_teleconsultoria: str :param cadastrado_servico_teleeducacao: Se o estabelecimento consome serviço de tele-educação :type cadastrado_servico_teleeducacao: str :param cadastrado_servico_telediagnostico: Se o estabelecimento consome serviço de Telediagnóstico :type cadastrado_servico_telediagnostico: str """ self.estabelecimentos.append({ "cnes": codigo_cnes, "tconsul": "1" if cadastrado_servico_teleconsultoria else "0", "teduca": "1" if cadastrado_servico_teleeducacao else "0", "tdiagn": "1" if cadastrado_servico_telediagnostico else "0", })
[docs]class Teleconsultoria: """Classe responsável por armazenar as solicitações de teleconsultoria. :param codigo_nucleo: Código CNES de identificação do núcleo cadastrado no SMART. :type codigo_nucleo: str :param mes_referencia: Mês de referência para os indicadores informados. :type mes_referencia: str """ def __init__(self, codigo_nucleo, mes_referencia): self.codigo_nucleo = codigo_nucleo self.mes_referencia = mes_referencia self.teleconsultorias = []
[docs] def addTeleconsultoria(self, dh_solicitacao, tipo, canal_acesso_sincrona, cpf_solicitante, especialidade_solicitante, ponto_telessaude_solicitacao, equipe_do_solicitante, tipo_profissional, cids, ciaps, dh_resposta_solicitacao, evitou_encaminhamento, intencao_encaminhamento, grau_satisfacao, resolucao_duvida, potencial_sof): """ Adiciona a solicitação de teleconsultoria. O SMART considera uma teleconsultoria única pela chave (dh_solicitacao e cpf_solicitante) :param dh_solicitacao: Data/hora da solicitação da teleconsultoria no formato dd/MM/yyyy HH:MM:SS :type dh_solicitacao: str :param tipo: Tipo da solicitação :type tipo: str :param canal_acesso_sincrona: Canal de acesso :type canal_acesso_sincrona: str :param cpf_solicitante: CPF do profissional que solicitou a teleconsultoria :type cpf_solicitante: str :param especialidade_solicitante: Código CBO da ocupação do solicitante no momento da solicitação da teleconsultoria. Consultar lista de CBOs dispnonível no SMART através do menu "Cadastros Gerais > Especialidades (CBO)". :type especialidade_solicitante: str :param ponto_telessaude_solicitacao: Código CNES do estabelecimento de saúde no qual o profissional solicitante atua :type ponto_telessaude_solicitacao: str :param equipe_do_solicitante: (opcional) Código INE da equipe de saúde na qual o profissional solicitante faz parte :type equipe_do_solicitante: str :param tipo_profissional: Código do tipo de profissional. Consultar lista de tipos de profissionais disponível no SMART através do menu "Cadastros Gerais > Tipos de Profissionais". :type tipo_profissional: str :param cids: Lista com os códigos CID (Classificação Internacional de Doenças). Consultar lista de CIDs disponível no SMART através do menu "Cadastros Gerais > CID 10 - Classificação Internacional de Doenças". :type cids: str :param ciaps: Lista com os códigos CIAP (Classificação Internacional de Assistência Primária). Consultar lista de CIAPS disponível no SMART através do menu "Cadastros Gerais > CIAP 2 - Classificação Internacional de Atenção Primária". :type ciaps: str :param dh_resposta_solicitacao: Data/hora da resposta da solicitação no formato dd/MM/yyyy HH:MM:SS :type dh_resposta_solicitacao: str :param evitou_encaminhamento: Se a teleconsultoria evitou o encaminhamento de paciente :type evitou_encaminhamento: str :param intencao_encaminhamento: Se o profissional registrou na teleconsultoria que tinha intenção de encaminhar o paciente :type intencao_encaminhamento: str :param grau_satisfacao: Grau de satisfação do solicitante quanto a resposta da sua teleconsultoria :type grau_satisfacao: str :param resolucao_duvida: Se a resposta da teleconsultoria atendeu ou não a teleconsultoria :type resolucao_duvida: str :param potencial_sof: Se a teleconsultoria tem potencial para se transformar em SOF :type potencial_sof: str """ teleconsultoria = {} if not Integra.validate_date(dh_solicitacao): raise Exception(u"A data da solicitação informada não está no formato dd/MM/yyyy HH:mm:ss.") if not Integra.validate_date(dh_resposta_solicitacao): raise Exception(u"A data da resposta informada não está no formato dd/MM/yyyy HH:mm:ss.") teleconsultoria["dtsol"] = dh_solicitacao teleconsultoria["tipo"] = tipo teleconsultoria["canal"] = canal_acesso_sincrona teleconsultoria["scpf"] = cpf_solicitante teleconsultoria["scbo"] = especialidade_solicitante teleconsultoria["scnes"] = ponto_telessaude_solicitacao if equipe_do_solicitante: teleconsultoria["sine"] = equipe_do_solicitante teleconsultoria["stipo"] = tipo_profissional if cids: teleconsultoria["cids"] = cids if ciaps: teleconsultoria["ciaps"] = ciaps teleconsultoria["dtresp"] = dh_resposta_solicitacao teleconsultoria["evenc"] = evitou_encaminhamento teleconsultoria["inenc"] = intencao_encaminhamento teleconsultoria["satisf"] = grau_satisfacao teleconsultoria["rduvida"] = resolucao_duvida teleconsultoria["psof"] = "1" if potencial_sof else "0" self.teleconsultorias.append(teleconsultoria)
[docs]class Telediagnostico: """Classe responsável por armazenar as solicitações de telediagnóstico :param codigo_nucleo: Código CNES de identificação do núcleo cadastrado no SMART. :type codigo_nucleo: str :param mes_referencia: Mês de referência para os indicadores informados. :type mes_referencia: str """ def __init__(self, codigo_nucleo, mes_referencia): self.codigo_nucleo = codigo_nucleo self.mes_referencia = mes_referencia self.telediagnosticos = []
[docs] def addSolicitacao(self, dh_realizacao_exame, codigo_tipo_exame, codigo_equipamento, tipo_justificativa, ponto_telessaude_com_telediagnostico, cpf_solicitante, especialidade_solicitante, ponto_telessaude_solicitacao, dh_laudo, cpf_laudista, especialidade_laudista, ponto_telessaude_laudista, cpf_paciente, cns_paciente, cidade_moradia_paciente): """ Adiciona a solicitação do telediagnóstico O SMART considera um telediagnóstico único pela chave (dh_realizacao_exame e cpf_solicitante) :param dh_realizacao_exame: Data/hora da solicitação do telediagnóstico no formato dd/MM/yyyy HH:MM:SS :type dh_realizacao_exame: str :param codigo_tipo_exame: Código SIA/SIH do tipo do exame :type codigo_tipo_exame: str :param codigo_equipamento: (opcional) Código do equipamento utilizado para realizar o exame de telediagnóstico. Consultar lista de equipamentos disponível no SMART através do menu "Cadastros Gerais > Equipamentos". :type codigo_equipamento: str :param tipo_justificativa: (opcional) Código da justificativa utilizada caso o código do equipamento não tenha sido informado. Obrigatório se codigo_equipamento não foi fornecido :type tipo_justificativa: str :param ponto_telessaude_com_telediagnostico: Código CNES do estabelecimento de saúde onde está o equipamento que realiza o exame :type ponto_telessaude_com_telediagnostico: str :param cpf_solicitante: CPF do profissional que solicitou o telediagnóstico :type cpf_solicitante: str :param especialidade_solicitante: Código CBO da ocupação do solicitante no momento da solicitação do Telediagnóstico. Consultar lista de CBOs disponível no SMART através do menu "Cadastros Gerais > Especialidades (CBO)". :type especialidade_solicitante: str :param ponto_telessaude_solicitacao: Código CNES do estabelecimento de saúde no qual o profissional solicitante atua :type ponto_telessaude_solicitacao: str :param dh_laudo: Data/hora da disponibilização do laudo no formato dd/MM/yyyy HH:MM:SS :type dh_laudo: str :param cpf_laudista: CPF do especialista que elaborou o laudo :type cpf_laudista: str :param especialidade_laudista: Código CBO da ocupação do laudista. :type especialidade_laudista: str :param ponto_telessaude_laudista: Código CNES do laudista :type ponto_telessaude_laudista: str :param cpf_paciente: CPF do paciente :type cpf_paciente: str :param cns_paciente: (opcional) CNS do paciente. Obrigatório se CPF não foi fornecido :type cns_paciente: str :param cidade_moradia_paciente: Código IBGE sem o dígito verificador da cidade onde o paciente mora. :type cidade_moradia_paciente: str """ telediagnostico = {} if not Integra.validate_date(dh_realizacao_exame): raise Exception(u"A data da realização do exame informada não está no formato dd/MM/yyyy HH:mm:ss.") if not Integra.validate_date(dh_laudo): raise Exception(u"A data de laudagem informada não está no formato dd/MM/yyyy HH:mm:ss.") telediagnostico["dhrexame"] = dh_realizacao_exame telediagnostico["ctexame"] = codigo_tipo_exame telediagnostico["cequipa"] = codigo_equipamento telediagnostico["tjust"] = tipo_justificativa telediagnostico["pnt"] = ponto_telessaude_com_telediagnostico telediagnostico["scpf"] = cpf_solicitante telediagnostico["scbo"] = especialidade_solicitante telediagnostico["scnes"] = ponto_telessaude_solicitacao telediagnostico["dhla"] = dh_laudo telediagnostico["lcpf"] = cpf_laudista telediagnostico["lcbo"] = especialidade_laudista telediagnostico["lcnes"] = ponto_telessaude_laudista telediagnostico["pcpf"] = cpf_paciente telediagnostico["pacns"] = cns_paciente telediagnostico["paibge"] = cidade_moradia_paciente self.telediagnosticos.append(telediagnostico)
[docs]class TeleeducacaoAtividade: """Classe responsável por armazenar os dados de atividades de tele-educação bem como as participações nessas atividades :param codigo_nucleo: Código CNES de identificação do núcleo cadastrado no SMART. :type codigo_nucleo: str :param mes_referencia: Mês de referência para os indicadores informados. :type mes_referencia: str """ def __init__(self, codigo_nucleo, mes_referencia): self.codigo_nucleo = codigo_nucleo self.mes_referencia = mes_referencia self.atividades_teleeducacao = [] def _findAtividadeInListByCodigoIdentificacao(self, codigo_identificacao): atividade_teleeducacao = None for atividade_item in self.atividades_teleeducacao: if codigo_identificacao == atividade_item["id"]: atividade_teleeducacao = atividade_item break if not atividade_teleeducacao: raise Exception(u"Atividade de Teleeducação não encontrada.") return atividade_item
[docs] def addAtividade(self, codigo_identificacao, data_disponibilizacao, carga_horaria, tipo_atividade, tema_codigo_decs): """ Adiciona a atividade de tele-educação :param codigo_identificacao: Código único utilizado pelo núcleo para identificar atividade :type codigo_identificacao: str :param data_disponibilizacao: Data/hora em que a atividade foi disponibilizada no formato d/MM/yyyy HH:mm:ss :type data_disponibilizacao: str :param carga_horaria: Duração da atividade em minutos :type carga_horaria: str :param tipo_atividade: Tipos de atividades educacional :type tipo_atividade: str :param tema_codigo_decs: Código da classificação do Descritores em Ciências da Saude (DeCS) da BIREME. Consultar lista de DeCS dispnonível no SMART através do menu "Cadastros Gerais > deSc BIREME - Descritores". :type tema_codigo_decs: str """ atividade_teleeducacao = {} if not Integra.validate_date(data_disponibilizacao): raise Exception(u"A data de disponibilização informada não está no formato dd/MM/yyyy HH:mm:ss.") atividade_teleeducacao["id"] = codigo_identificacao atividade_teleeducacao["dtdispo"] = data_disponibilizacao atividade_teleeducacao["cargah"] = carga_horaria atividade_teleeducacao["tipo"] = tipo_atividade atividade_teleeducacao["decs"] = tema_codigo_decs self.atividades_teleeducacao.append(atividade_teleeducacao)
[docs] def addParticipacaoAtividade(self, codigo_identificacao, data_da_participacao, cpf_participante, especialidade_participante, estabelecimento_telessaude_participante, equipe_participante, grau_satisfacao): """ Adiciona as participações em atividades de tele-educação Observação: deve-se antes registrar a atividade de tele-educação. :param codigo_identificacao: Código único utilizado pelo núcleo para identificar atividade :type codigo_identificacao: str :param data_da_participacao: Data/hora da participação no formato dd/MM/yyyy HH:MM:SS :type data_da_participacao: str :param cpf_participante: CPF do participante da atividade :type cpf_participante: str :param especialidade_participante: Código CBO da ocupação do participante no momento da participação da atividade. :type especialidade_participante: str :param estabelecimento_telessaude_participante: Código CNES do estabelecimento de saúde no qual o participante atua no momento da participação da atividade :type estabelecimento_telessaude_participante: str :param equipe_participante: (opcional) Código INE da equipe de saúde da qual o participante faz parte :type equipe_participante: str :param grau_satisfacao: Grau de satisfação do participante quanto à atividade :type grau_satisfacao: str """ participacao_atividade_teleeducacao = {} if not self.atividades_teleeducacao: raise Exception(u"Deve existir ao menos uma atividade registrada para o código de identificação fornecido.") if not codigo_identificacao: raise Exception(u"Código de identificação da atividade é obrigatório.") if not Integra.validate_date(data_da_participacao): raise Exception(u"A data de participação informada não está no formato dd/MM/yyyy HH:mm:ss.") participacao_atividade_teleeducacao["id"] = codigo_identificacao participacao_atividade_teleeducacao["dtparti"] = data_da_participacao participacao_atividade_teleeducacao["cpf"] = cpf_participante participacao_atividade_teleeducacao["cbo"] = especialidade_participante participacao_atividade_teleeducacao["cnes"] = estabelecimento_telessaude_participante if equipe_participante: participacao_atividade_teleeducacao["ine"] = equipe_participante participacao_atividade_teleeducacao["satisf"] = grau_satisfacao atividade_teleeducacao = self._findAtividadeInListByCodigoIdentificacao(codigo_identificacao) if not atividade_teleeducacao.get("participacoes_teleeducacao"): atividade_teleeducacao["participacoes_teleeducacao"] = [] atividade_teleeducacao["participacoes_teleeducacao"].append(participacao_atividade_teleeducacao)
[docs]class TeleeducacaoObjetoAprendizagem: """Classe responsável por armazenar os dados de objetos de aprendizagem de tele-educação e seus respectivos acessos para monitoramento e avaliação do Programa Nacional Telessaúde Brasil Redes). :param codigo_nucleo: Código CNES de identificação do núcleo cadastrado no SMART. :type codigo_nucleo: str :param mes_referencia: Mês de referência para os indicadores informados. :type mes_referencia: str """ def __init__(self, codigo_nucleo, mes_referencia): self.codigo_nucleo = codigo_nucleo self.mes_referencia = mes_referencia self.objetos_aprendizagem = []
[docs] def addObjetoAprendizagem(self, codigo_identificacao, data_disponibilizacao, disponibilizado_plataforma_telessaude, disponibilizado_ares, disponibilizado_avasus, disponibilizado_redes_sociais, disponibilizado_outros, tipo_objeto, tema_codigo_decs, url, numero_acesso): """ Adiciona os objetos de aprendizagem disponibilizados. São considerados objetos de aprendizagem as ofertas de tele-educação disponibilizadas de forma assíncronas em documento texto ou audiovisual para acesso de profissional de saúde (vide nota técnica 50/2015 DEGES/SGTES/MS) :param codigo_identificacao: Código único utilizado pelo núcleo para identificar o objeto de aprendizagem :type codigo_identificacao: str :param data_disponibilizacao: Data/hora em que o objeto de aprendizagem foi disponibilizado no formato d/MM/yyyy HH:mm:ss :type data_disponibilizacao: str :param disponibilizado_plataforma_telessaude: Se disponibilizado na plataforma de telessaúde do próprio núcleo :type disponibilizado_plataforma_telessaude: str :param disponibilizado_ares: Se disponibilizado Biblioteca Virtual, Coletânea Telessaúde no ARES/UNA-SUS :type disponibilizado_ares: str :param disponibilizado_avasus: Se disponibilizado no AVA-SUS - Ambiente Virtual de Aprendizagem do Sistema Único de Saúde (SUS), :type disponibilizado_avasus: str :param disponibilizado_redes_sociais: Se disponibilizado em alguma rede social :type disponibilizado_redes_sociais: str :param disponibilizado_outros: Se disponibilizado em outro repositório :type disponibilizado_outros: str :param tipo_objeto: Classificação do objeto de aprendizagem :type tipo_objeto: str :param tema_codigo_decs: Código da classificação do Descritores em Ciências da Saude (DeCS) da BIREME. Consultar lista de DeCS disponível no SMART através do menu "Cadastros Gerais > deSc BIREME - Descritores". :type tema_codigo_decs: str :param url: Endereço de rede para acesso ao recurso quando este for público, não necessita de credenciais para acesso. :type url: str :param numero_acesso: Número de acesso ao objeto de aprendizagem :type numero_acesso: str """ objeto_aprendizagem = {} if not codigo_identificacao: raise Exception(u"Código de identificação da atividade é obrigatório.") if not Integra.validate_date(data_disponibilizacao): raise Exception(u"A data de disponibilização informada não está no formato dd/MM/yyyy HH:mm:ss.") objeto_aprendizagem["id"] = codigo_identificacao objeto_aprendizagem["dtdispo"] = data_disponibilizacao objeto_aprendizagem["dplataf"] = "1" if disponibilizado_plataforma_telessaude else "0" objeto_aprendizagem["dares"] = "1" if disponibilizado_ares else "0" objeto_aprendizagem["davasus"] = "1" if disponibilizado_avasus else "0" objeto_aprendizagem["drsociais"] = "1" if disponibilizado_redes_sociais else "0" objeto_aprendizagem["doutros"] = "1" if disponibilizado_outros else "0" objeto_aprendizagem["tipo"] = tipo_objeto objeto_aprendizagem["decs"] = tema_codigo_decs if url: objeto_aprendizagem["url"] = url objeto_aprendizagem["num"] = numero_acesso self.objetos_aprendizagem.append(objeto_aprendizagem)
[docs]class TeleeducacaoCurso: """Classe responsável por armazenar os cursos oferecidos por meio da Tele-educação :param codigo_nucleo: Código CNES de identificação do núcleo cadastrado no SMART. :type codigo_nucleo: str :param mes_referencia: Mês de referência para os indicadores informados. :type mes_referencia: str """ def __init__(self, codigo_nucleo, mes_referencia): self.codigo_nucleo = codigo_nucleo self.mes_referencia = mes_referencia self.cursos_teleeducacao = []
[docs] def addCurso(self, identificacao_curso, data_inicio, data_fim, vagas_ofertadas, tema, carga_horaria, lista_cpf_matriculados, lista_cpf_formados, lista_cpf_evadidos, lista_cpf_reprovados): """ Adiciona/atualiza o curso oferecido pela tele-educação O SMART considera um curso único pela chave (identificacao_curso e data_inicio) :param identificacao_curso: Código único utilizado pelo núcleo para identificar a disponibilização do curso :type identificacao_curso: str :param data_inicio: Data/hora no qual o curso foi disponibilizado formato d/MM/yyyy HH:mm:ss :type data_inicio: str :param data_fim: (opcional)Data/hora no qual o curso foi encerrado formato d/MM/yyyy HH:mm:ss :type data_fim: str :param vagas_ofertadas: Quantidade de vagas ofertas :type vagas_ofertadas: str :param tema: Código da classificação do Descritores em Ciências da Saude (DeCS) da BIREME. Consultar lista de DeCS disponível no SMART através do menu "Cadastros Gerais > deSc BIREME - Descritores". :type tema: str :param carga_horaria: Duração do curso em minutos :type carga_horaria: str :param lista_cpf_matriculados: (opcional) Lista de CPFs dos alunos matriculados. Quando encerrar o período de matrículas do curso, deve-se enviar novamente o curso com a relação dos alunos matriculados. :type lista_cpf_matriculados: str :param lista_cpf_formados: (opcional) Lista de CPFs dos alunos formados. Quando o curso tiver sido encerrado, deve-se enviar novamente o curso com a relação dos alunos formados. :type lista_cpf_formados: str :param lista_cpf_evadidos: (opcional) Lista de CPFs dos alunos evadidos. Quando o curso tiver sido encerrado, deve-se enviar novamente o curso com a relação dos alunos evadidos. :type lista_cpf_evadidos: str :param lista_cpf_reprovados: (opcional) Lista de CPFs dos alunos reprovados. Quando o curso tiver sido encerrado, deve-se enviar novamente o curso com a relação dos alunos reprovados. :type lista_cpf_reprovados: str """ curso = {} if not identificacao_curso: raise Exception(u"Código de identificação do curso é obrigatório.") if not Integra.validate_date(data_inicio): raise Exception(u"A data de início do curso informada não está no formato dd/MM/yyyy HH:mm:ss.") if not Integra.validate_date(data_fim): raise Exception(u"A data de encerramento do curso informada não está no formato dd/MM/yyyy HH:mm:ss.") curso["id"] = identificacao_curso curso["dtini"] = data_inicio curso["dtfim"] = data_fim curso["vagas"] = vagas_ofertadas curso["decs"] = tema curso["cargah"] = carga_horaria curso["cpfs_matri"] = lista_cpf_matriculados curso["cpfs_forma"] = lista_cpf_formados curso["cpfs_evadi"] = lista_cpf_evadidos curso["cpfs_repro"] = lista_cpf_reprovados self.cursos_teleeducacao.append(curso)