Open endersonmaia opened 5 years ago
No caso em que seja necessário processar arquivos XML e reorganizá-los por períodos distintos, por ex., seria necessário um Encoder para criar um novo arquivo XML.
A partir da documentação do pacote encoding, temos que:
Package encoding defines interfaces shared by other packages that convert data to and from byte-level and textual representations.
Só que as interfaces definidas no pacote se chamam *(Un)Marshaler. Ou seja, a coisa coisa é confusa.
Mas dando um passo para trás, você parece querer realizar um processamento que não converte de um padrão para outro e sim realiza uma reorganização. Ou seja, você não parece algo mais parecido com sort.Iterface, não? Para eu conseguir ajudar melhor, talvez vale a pena descrever melhor a funcionalidade
Outro cenário possível, é uma API para criar o XML do SNGPC importando movimentações de arquivos CSV ou de banco de dados.
Esse é um Loader ou Importer. Eu particularmente gosto dos métodos do tipo sngpc.FromCSV
ou LoadFromCSV. Exemplos disso que eu criei podem ser visto nos construtores da struct Schema
@danielfireman vou tentar explicar melhor aqui a utilidade e depois que ficar mais compreendido, arrumo até o README.md
basicamente o SNGPC é um formado de arquivo que é gerado pelas farmácias para ser enviado para a ANVISA, informando sobre a dispensação (venda) de medicamentos que exigem controle especial (exigem receita médica, arquivar as receitas, farmacêutico responsável e tal e tal)
uma utilidade do pacote seria conseguir ler esse arquivo, por isso iniciei mapeando o XML
depois a ideia é poder transformar estes dados em CSV para poder gerar relatórios, sintetizando e agrupando por data, medicamentos, classificação terapêutica e afins
outra coisa seria anonimizar os dados, existem muitos dados como CPF e Nome do paciente e/ou comprador, CRM e nome do médico, entre outras coisas, daí uma função de exportar já tirando estes dados, ou até gerar um novo XML com os dados removidos/embaralhados/trocados
outra função, que eu não vejo utilidade para mim inicialmente, é poder gerar um arquivo SNGPC, tipo, ter uma API que poderia ser usado por um sistema de informação da farmácia, onde ele pegaria um CSV com a movimentação e as informações necessários , e geraria um SNGPC válido para ser enviado a ANVISA ou consumido por outro sistema de gestão de SNGPC
Entendi sim. Obrigado pelas explicações. Pensei um pouco aqui e minha sugestão é não ter pacotes inicialmente. A coisa fluiria a partir do import padrão github.com/endersonmaia/sngpc
Se você quiser dar oportunidade de ir e vir (de formatos) e tem validações e etc no XML, pode usar os From e To. Por exemplo:
import github.com/endersonmaia/sngpc
func main() {
f, err := sngpc.FromXMLPath("myxml.xml")
checkErr(err)
// Do stuff
csv, err := f.ToCSV() // Retornando um [][]string
checkErr(err)
..
other,err := sngpc.FromCSVPath("csv.csv")
checkErr(err)
other.ToXML()
}
A vantagem dessa abordagem é a simplicidade (foi a que eu usei em tableschema-go). A desvantagem dessa é que teríamos todos os construtores no pacote e exportadores na struct. Eu gosto dessa simplicidade, até por que você não sabe exatamente quantos exportadores precisará.
Outra abordagem é a usada pelo pacote encoding e separar os importadores dos exportadores (marshalers e unmarshalers) em structs diferentes. A desvantagem é uma possível explosão de structs.
No caso em que seja necessário processar arquivos XML e reorganizá-los por períodos distintos, por ex., seria necessário um Encoder para criar um novo arquivo XML.
Não sei se a melhor nomenclatura seria
Encoder
ouMarsheler
, ainda estudando o vocabulário do adequado, ;)Outro cenário possível, é uma API para criar o XML do SNGPC importando movimentações de arquivos CSV ou de banco de dados.