<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Genilto Vanzin</title>
	<atom:link href="https://genilto.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://genilto.com</link>
	<description></description>
	<lastBuildDate>Tue, 22 Apr 2025 17:11:04 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://genilto.com/wp-content/uploads/sites/2/2016/01/cropped-icone-32x32.png</url>
	<title>Genilto Vanzin</title>
	<link>https://genilto.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Tecnologia da Informação. Uma complexa simplificação!</title>
		<link>https://genilto.com/tecnologia-da-informacao-uma-complexa-simplificacao/</link>
					<comments>https://genilto.com/tecnologia-da-informacao-uma-complexa-simplificacao/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Wed, 19 May 2021 01:12:11 +0000</pubDate>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Gerenciamento]]></category>
		<category><![CDATA[Pensamentos]]></category>
		<category><![CDATA[diferencial competitivo]]></category>
		<category><![CDATA[empresas]]></category>
		<category><![CDATA[tecnologia da informação]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=2092</guid>

					<description><![CDATA[Como todos já sabem, sou da área de TI e, convenhamos, falar de Tecnologia da Informação (TI), pelo menos nos dias de hoje, é uma tarefa muito fácil. Esta é ...]]></description>
										<content:encoded><![CDATA[
<p>Como todos já sabem, sou da área de TI e, convenhamos, falar de Tecnologia da Informação (TI), pelo menos nos dias de hoje, é uma tarefa muito fácil. Esta é uma área que ficou amplamente conhecida e, mais ainda, que se tornou absurdamente necessária e presente na vida da maioria das pessoas, e principalmente das empresas.</p>



<p>Às vezes, observo minha mãe utilizando o celular. Para ela é muito simples, basta escrever e enviar, ou clicar no “microfonezinho”, falar, enviar, e depois aguardar a resposta. Às vezes, só fica rolando a página do Facebook, para ver as novidades, ou assistindo a um vídeo de receitas no Youtube.</p>



<p>É tudo tão simples, fácil de usar, e todo mundo já está acostumado com a tecnologia. Até minha mãe! Quem diria, não é mesmo?</p>



<p>O que me pergunto, é se todo mundo parou para pensar, de verdade, quanta informação tem nas mãos. Não digo isso tentando justificar nenhuma teoria da conspiração nem nada disso. Apenas gostaria que, você que está lendo, fizesse esse pequeno exercício de parar para pensar no que é preciso para que tudo isso funcione.&nbsp;</p>



<p>E agora chegamos a um ponto interessante. O Facebook, e qualquer outra rede social hoje em dia, tem algoritmos muito avançados para as sugestões de quais posts irá mostrar para você. E temos vários serviços que podemos incluir nessa lista, Instagram, Youtube, Spotify, Linkedin, Pinterest, Twitter, o próprio Google e todas as formas de publicidade via internet que te rodeiam. Todos <strong>conhecem as suas preferências</strong>, e sugerem coisas para você.</p>



<p>Isso é só a pontinha do iceberg. Você sabe, por acaso, quantos vídeos tem no youtube? Nem eu. Mas tem bastante, isso eu posso garantir. Vou pegar como base um vídeo que eu mesmo enviei para o Youtube esses dias atrás, de uns 10 minutos mais ou menos. Ele tem cerca de 1,3 GB. O Youtube, depois que enviamos um vídeo, ainda cria mais algumas versões do mesmo vídeo, em diferentes qualidades (480p, 720p, 1080p, 4K, etc). Não sei se ficou claro, mas tem que ter muito <strong>espaço em disco</strong> para armazenar isso tudo.</p>



<p>E ainda não dei alguns exemplos de <strong>invasões</strong> que acontecem diariamente, onde uns perdem dados, outros têm dados sensíveis que são vazados publicamente, e assim por diante. Acho que você já entendeu. Haja backup e firewall para segurar as pontas.</p>



<p>E então parou para pensar? O desafio é grande. Lidar com uma infinidade de informações, entendendo o que fazer com cada parte dela, em uma estrutura de servidores e de softwares que suporte toda a demanda necessária, e ainda de uma forma que fique totalmente segura. Parece fácil para você?</p>



<p>Não esqueça que o software tem que ficar bonito, e ainda tem que ser auto explicativo. Inclui aí mais um trabalho de <strong>Design e UX.</strong> Só pra não deixar de citar isso também.</p>



<p>Era pra ser um texto pequeno. Mas tive que montar uma narrativa, para que no final eu pudesse embasar, ao menos um pouquinho, o que eu queria dizer. No fim, depois de tudo isso dito, meu ponto de vista é tão simples quanto enviar uma mensagem no Whatsapp, depois do whatsapp ter sido criado, claro.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>&#8220;Fazer o complexo se tornar simples&#8221;.</p></blockquote>



<p>Escrevi esse texto todo apenas para falar isso. É tão simples, mas talvez eu quisesse demonstrar, na prática, o quanto é complexo fazer isso.</p>



<p>E sim, ser um profissional de TI, ao menos do meu ponto de vista, sempre foi isso. Automatizar processos, armazenar, proteger e gerenciar a informação, seja apenas organizando-a de uma forma clara ou até mesmo sugerindo outras informações baseadas nos dados armazenados. E para as empresas, hoje em dia não é mais diferencial, isso é necessidade.</p>



<p>Participei de muitos projetos de TI, quase todos mirando o mesmo objetivo. No final, era preciso informação para tomada de <strong>decisão</strong>. Hoje, vejo que isso está tomando proporções inimagináveis. Informação está se tornando parte de nosso dia a dia, e de uma maneira nunca antes vista. Para o profissional de TI, a responsabilidade em alguns casos é imensa!</p>



<p>Para mim, hoje é bastante claro que informação é poder. E para ter isso, não tem como escapar da <strong>tecnologia</strong>.&nbsp;</p>



<p>Viu como ficou claro o termo <strong>Tecnologia da Informação</strong>?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/tecnologia-da-informacao-uma-complexa-simplificacao/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>No Brasil, é 60hz, mano!</title>
		<link>https://genilto.com/no-brasil-e-60hz-mano/</link>
					<comments>https://genilto.com/no-brasil-e-60hz-mano/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Wed, 05 May 2021 03:48:56 +0000</pubDate>
				<category><![CDATA[Energia Solar]]></category>
		<category><![CDATA[60hz]]></category>
		<category><![CDATA[inversor]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=2087</guid>

					<description><![CDATA[Fala pessoas! Cansei de procurar inversores na china. Mas todos eles, os mais baratos pelo menos, vinham com 50hz de frequência de saída. Não sei por que raios não padronizam ...]]></description>
										<content:encoded><![CDATA[
<p>Fala pessoas!</p>



<p>Cansei de procurar inversores na china. Mas todos eles, os mais baratos pelo menos, vinham com 50hz de frequência de saída.</p>



<p>Não sei por que raios não padronizam tudo. Mesmo no Brasil, temos 110v e 220v. Dependendo da região, se você se mudar, tem que jogar fora a geladeira ou secador de cabelo pois não dá pra ligar mais (estou só brincando, temos algumas outras opções).</p>



<p>Enfim, esses dias vi alguns vídeos sobre o inversor Mensela pelo youtube. O mais legal desse carinha, é que ele tem várias opções de compra, 12v ou 24v por exemplo, saída 110v ou 220v e principalmente a facilidade que ele dá para a troca de frequência!</p>



<p>No vídeo abaixo, eu mostro como se faz, mas em resumo, você abre a tampa, liga o inversor (isso mesmo, tem que ligar ele aberto), e aperta o botão e pronto, terás um inversor na frequência desejada!</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Energia Solar Off Grid #04 - Como Modificar Freq. Inversor Mensela de 50hz para 60hz + Teste" width="800" height="450" src="https://www.youtube.com/embed/rFkr6pTdYM0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>Vou deixar aqui também o Unboxing desse inversor e também, pra você ver como ele vem e o que acompanha no pacote. Aproveita e curte as dicas que estou passando no vídeo, caso você queira comprar o seu com segurança!</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Energia Solar Off Grid #03 - Unboxing Inversor Mensela 5000w Banggood + Dicas de compra" width="800" height="450" src="https://www.youtube.com/embed/tMvaux7hn3g?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>Se quiser comprar esse inversor, eu achei ele já em 60hz na banggood também. </p>



<p>Dessa forma não precisa fazer isso. </p>



<p><strong>Link para compra do Inversor já em 60hz:</strong> <a href="https://genilto.com/3h9i" target="_blank" rel="noreferrer noopener">https://genilto.com/3h9i</a></p>



<p><strong>Link para compra do multímetro que utilizei (MT8208): </strong><a href="https://genilto.com/link/mt8208" target="_blank" rel="noreferrer noopener">https://genilto.com/link/mt8208 </a></p>



<p><strong>Controlador de carga que falo no vídeo:</strong> <a href="https://genilto.com/link/balanceador-de-carga" target="_blank" rel="noreferrer noopener">https://genilto.com/link/balanceador-de-carga</a></p>



<p>Até a próxima!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/no-brasil-e-60hz-mano/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sistema de Energia Solar Off Grid. Por que ter um e diferenças do On Grid</title>
		<link>https://genilto.com/sistema-de-energia-solar-off-grid-por-que-ter-um-e-diferencas-do-on-grid/</link>
					<comments>https://genilto.com/sistema-de-energia-solar-off-grid-por-que-ter-um-e-diferencas-do-on-grid/#comments</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Sun, 02 May 2021 04:27:58 +0000</pubDate>
				<category><![CDATA[Energia Solar]]></category>
		<category><![CDATA[eletricidade]]></category>
		<category><![CDATA[energia solar]]></category>
		<category><![CDATA[off-grid]]></category>
		<category><![CDATA[on-grid]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=2074</guid>

					<description><![CDATA[Fala pessoas. Tudo bem? Espero que tudo bem. Pra quem não me conhece, eu sou Genilto, dono desse blog aqui, e também tenho um canal no youtube onde eu tento ...]]></description>
										<content:encoded><![CDATA[
<p>Fala pessoas. Tudo bem? Espero que tudo bem.</p>



<p>Pra quem não me conhece, eu sou Genilto, dono desse blog aqui, e também tenho um canal no youtube onde eu tento compartilhar com a galera alguns dos vários hobbies que eu tenho.</p>



<p>Bem, pelo menos a ideia é essa né, já que estou basicamente começando agora e os vídeos anteriores, se quiser dar uma olhada, tem um pouco dessa ideia, mas são bem aleatórios.</p>



<p>E outra coisa, não se assusta aí se daqui pra frente você ver aqui no canal um vídeo sobre programação, drones, eletrônica, ou música, vai ser isso mesmo, uma salada com quase tudo o que eu gosto de fazer.</p>



<p>Só pra explicar um pouquinho, estou começando uma série de vídeos sobre meu sistema de energia solar off grid.</p>



<p>Eu sei, eu sei, tem bastante gente falando nesse assunto por aí e eu vou ser só mais um maluco falando sobre isso.</p>



<p>No entanto, eu tenho um diferencial, já que eu não sou especialista nessa parada, eu não vou explicar exatamente as melhores práticas e passo a passo disso e daquilo.&nbsp;</p>



<p><em><s>Se bem que o meu sistema vai ser tipo, o melhor sistema de energia solar já visto pela humanidade né? </s></em></p>



<p>Mas vamos lá, o que eu quero dizer é que só vou mostrar o projeto que estou montando, dizer se funciona ou não, mostrar os problemas que vou enfrentando,<s> tirando as maiores cagadas é claro, que é pra não passar vergonha</s>, e é isso.</p>



<p>E Por quê?</p>



<p>Só por que eu acho divertido fazer isso. E pronto.</p>



<p>E tem mais, eu não vou ficar vendendo cursos desse assunto pra vocês, ok?</p>



<h2 class="wp-block-heading">Por que ter um sistema solar off grid?</h2>



<p>Eu vou responder essa pergunta apenas explicando o porquê eu quis fazer dessa forma. E vou adiantar que off-grid não é um bom negócio pra todo mundo.</p>



<p>Só pra clarear bem rapidinho:</p>



<p>ON-GRID quer dizer um sistema de energia solar que gera energia, através da luz solar, e injeta essa energia na rede da sua casa diretamente, alimentando os equipamentos da casa, e a sobra enviando para a rede da concessionária.</p>



<p>Já o OFF-GRID, também gera energia através da luz solar, mas diferente do ON-GRID, ele não injeta essa energia na rede, ele armazena em baterias e usa em uma rede separada da rede da concessionária.</p>



<p>Resumindo, ON-GRID é NA REDE e OFF GRID é FORA DA REDE. Sacaram?</p>



<p>Então, voltando a pergunta de porquê OFF-GRID, no meu caso eu não foquei apenas na economia de dinheiro. Como imagino seria o objetivo principal de um sistema on grid, e acho que o objetivo principal da maioria esmagadora das pessoas.</p>



<p><strong>Logo a resposta da pergunta é obviamente: depende.</strong></p>



<p>Mas é isso mesmo, depende da necessidade que você tem.</p>



<p>Então vou falar um pouco da minha necessidade, e responder logo essa pergunta.</p>



<p>Em resumo, eu trabalho em casa na maior parte do tempo, e não é legal ficar sem energia elétrica para trabalhar, já que dependo exclusivamente de um computador e de acesso a internet!</p>



<p>Então, se você precisa de energia quando não tem energia, você precisa de baterias, o que é uma das características, além das que citei antes, que diferenciam o sistema solar off grid do on grid.</p>



<p>E, falando do on grid aqui de novo, para instalar um, primeiro você precisa de projeto, homologação da concessionária, se você não souber os paranauê de montar um projeto dentro de todas as especificações que eles exigem, precisa contratar uma empresa pra fazer isso tudo e por aí vai. Tem pouco espaço pra ficar brincando, testando,<s> queimando as coisas</s>&#8230;</p>



<p>Então, cadê toda a graça e o desafio de criar você mesmo essa parada?</p>



<p>E eu sei, no on grid, depois você tira o investimento, começa a ganhar créditos, dependendo do tamanho do seu projeto, começa a pagar só a taxa básica da concessionária, blá blá blá</p>



<p>Beleza, faz sentido, é tudo muito bom, mas me diz uma coisa, e se acabar a energia da concessionária?</p>



<p>Vou te dizer, pode estar o maior dia ensolarado lá fora, mas você vai estar sem nenhum volt se quer na sua tomada!</p>



<p>Isso mesmo, o sistema on grid só funciona quando tem energia da rede. Pelo que entendi funciona dessa forma por questões de segurança, ou seja, se não tem energia na rede, eu da minha casa, não posso injetar energia lá, ou eu posso eletrocutar o possível técnico da concessionária que tá lá pendurado no poste dando manutenção em alguma coisa e que acha que não tem energia, entendeu?</p>



<p>E também, eu acho que esses inversores on-grid aí precisam da onda senoidal de referência da rede para poder funcionar. E ainda pensando bem, é necessário ter a rede para manter os picos de energia da casa quando estiver um tempo mais nublado e tudo isso. Faz sentido ter que ter rede né?</p>



<p>Enfim, vou tentar finalizar, dizendo que o sistema off-grid tem baterias, coisa que já falei antes, mas vou complementar dizendo ainda que isso adiciona um monte de complexidade no sistema, e aumenta o custo final pra montar ele, afinal, você precisa comprar essas baterias, e elas não são muito baratas não!!</p>



<p>Eu pretendo fazer um vídeo futuro detalhando exatamente quais são, quanto paguei e onde comprei todos os equipamentos que tenho. </p>



<p><em>Aliás, vocês gostariam de saber essas coisas? Quais são meus equipamentos, quanto paguei e tal? Senão nem faço. Comenta aí em baixo.</em></p>



<p>Voltando pra falar da complexidade das baterias, saiba que elas não podem descarregar demais, ou seja, quanto mais descarregar todo dia, menos elas vão durar. Então, eu acho que um bom parâmetro é nunca usar mais do que 50% da capacidade nominal da bateria. Se for uma bateria de 220Ah, usar só 110Ah no dia, se usar no máximo 20% seria perfeito.</p>



<p>Só essa questão, pede um gerenciamento manual de troca, ou seja, enquanto as baterias estão carregadas posso manter a casa com o sistema off-grid, quando as baterias estão baixas, eu trocaria pra rede. Ou poderia adicionar um sistema automatizado para fazer isso. Mais complexidade na parada!</p>



<p>E ainda, falando das baterias, se você fizer um sistema que não seja 12v, por exemplo, se usar em 24, 36 ou 48v, vai ter que garantir que essas baterias se mantenham balanceadas.&nbsp;</p>



<p>Dá pra usar um balanceador de baterias pra isso, não é o fim do mundo. Desde que suas baterias sejam de mesma capacidade e tenham mesma saúde, por assim dizer.</p>



<p>Em geral, baterias têm uma duração de uns 5 anos, pelo que vi na especificação das minhas da moura. Imagino que possam durar mais ou menos, dependendo do uso.</p>



<p>Para painéis que duram mais de 25 anos, no meio do caminho teremos várias trocas de baterias.</p>



<p>Outra coisa que talvez não ficou claro e quero lembrar é que no sistema off-grid também tem economia!</p>



<p>(Aplausos)</p>



<p>Pois a energia que estou captando da luz solar, e usando para ligar meus equipamentos, como lâmpadas, computadores, TV, Som, quem sabe geladeira, eu não estarei usando da concessionária, logo, não preciso pagar!</p>



<p>(Mais aplausos)</p>



<p>Enfim, isso é o que eu queria dizer hoje, dos motivos que me levaram a montar o meu sistema off-grid. Espero que tenham entendido meus pontos.</p>



<p>Só queria terminar deixando uma reflexão:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Pense comigo, se amanhã acontecer um apocalipse zumbi, e de uma hora pra outra todas as redes de energia globais pararem de funcionar, quem é que ainda vai ter energia, hein?</p></blockquote>



<p>Se não quiser ler, tem um vídeo que falo essas coisas todas aí em cima.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Energia Solar Off Grid #01 - Por que escolhi off grid + Diferenças do on grid  + Mudanças no Canal" width="800" height="450" src="https://www.youtube.com/embed/3A0EVz6mqMM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>Tem outros motivos para ter um sistema de energia solar também, eu falo um pouquinho nesse vídeo esquisito que fiz aí embaixo.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Energia Solar Off Grid #02 - Mais motivos por que escolhi off grid. A Natureza!" width="800" height="450" src="https://www.youtube.com/embed/n62GdyDhV4M?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p class="has-luminous-vivid-orange-color has-text-color">Valeu, grande abraço!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/sistema-de-energia-solar-off-grid-por-que-ter-um-e-diferencas-do-on-grid/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Revivendo uma câmera IP chinesa</title>
		<link>https://genilto.com/revivendo-uma-camera-ip-chinesa/</link>
					<comments>https://genilto.com/revivendo-uma-camera-ip-chinesa/#comments</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Sun, 01 Nov 2020 23:49:00 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Eletrônica]]></category>
		<category><![CDATA[Importações]]></category>
		<category><![CDATA[Suporte Informática]]></category>
		<category><![CDATA[Besder]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[ipcam]]></category>
		<category><![CDATA[minicom]]></category>
		<category><![CDATA[nodemcu]]></category>
		<category><![CDATA[UART]]></category>
		<category><![CDATA[xiongmaitech]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=2020</guid>

					<description><![CDATA[Nesse post vamos ver como reviver uma câmera IP chinesa da Marca Besder comprada no aliexpress, que utiliza o chip da xiongmaitech (que inclusive me pareceu famosa pela falta de ...]]></description>
										<content:encoded><![CDATA[
<p>Nesse post vamos ver como reviver uma câmera IP chinesa da Marca <strong><a rel="noreferrer noopener" href="https://besdertech.aliexpress.com/store/1182439" target="_blank">Besder</a></strong> comprada no <a rel="noreferrer noopener" href="https://pt.aliexpress.com/item/32827610136.html" target="_blank">aliexpress</a>, que utiliza o chip da <strong><a rel="noreferrer noopener" href="http://www.xiongmaitech.com/" target="_blank">xiongmaitech</a></strong> (que inclusive me pareceu famosa pela falta de segurança em suas câmeras. Tem várias postagens pela internet falando das brechas de segurança nos equipamentos).</p>



<p>A câmera deixou de funcionar depois da tentativa de atualização do firmware a partir do aplicativo <a href="https://play.google.com/store/apps/details?id=com.xm.csee&amp;hl=pt_BR" target="_blank" rel="noreferrer noopener">ICSee</a>. A atualização travou e depois disso, não ligou  mais. Não adiantava tentar o reset, nem nada.</p>



<p>Pesquisando na internet, descobri que esse tipo de câmera possui uma interface de comunicação serial, porém não facilmente acessível. A partir daí seria possível realizar alguns procedimentos para tentar reinstalar o firmware e reestabelecer o funcionamento normal da câmera.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Faça esse procedimento por sua conta e risco. Não é um processo simples e muita coisa pode dar errado.</p></blockquote>



<p>Se você tem interesse em comprar uma câmera igual a essa, pode comprar no aliexpress, é mais barato do que comprar no mercado livre por exemplo, embora demore um pouco mais. A Besder, que é o vendedor onde comprei essa câmera até então é de confiança, todos os produtos que comprei com eles vieram certinho e o suporte é bom também. Se tiver interesse, abaixo coloquei alguns links com câmeras que já comprei e são boas. Algumas inclusive você pode rotacionar remotamente, segue o link da câmeras, é só clicar na câmera desejada:</p>



<a href="https://s.click.aliexpress.com/e/_AbXgSK" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://ae01.alicdn.com/kf/H454013f7b68f4d6ea4868810798d2f6eH.jpg_140x140.jpg"/></a>
&nbsp;
<a href="https://s.click.aliexpress.com/e/_9iLfns" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://ae01.alicdn.com/kf/Hccc0aa9c328b40b491c77df8c5e5d6bah.jpg_80x80.jpg"/></a>



<h2 class="wp-block-heading">Identificando os pinos UART (GND, TX, RX)</h2>



<p>Primeiro de tudo é necessário identificar quais são os pinos UART na placa da câmera. Para isso segui alguns passos, conforme alguns posts que li, dá uma olhada mais abaixo nas referências para ver os links.</p>



<p>Em resumo, abri a câmera e procurei por uma seção de 4 pinos padrão que parececem ser os pinos que eu queria. No meu caso, estava relativamente fácil de identificar, uma vez que estava bem claro 4 pinos, sendo que um deles estava demarcado com um &#8220;1&#8221;.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="918" height="1024" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/identificacao-uart-918x1024.jpg" alt="" class="wp-image-2024" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/identificacao-uart-918x1024.jpg 918w, https://genilto.com/wp-content/uploads/sites/2/2020/11/identificacao-uart-269x300.jpg 269w, https://genilto.com/wp-content/uploads/sites/2/2020/11/identificacao-uart-768x857.jpg 768w, https://genilto.com/wp-content/uploads/sites/2/2020/11/identificacao-uart-1377x1536.jpg 1377w, https://genilto.com/wp-content/uploads/sites/2/2020/11/identificacao-uart.jpg 1584w" sizes="auto, (max-width: 918px) 100vw, 918px" /></figure>



<p>Geralmente são 4 pinos, pois o VCC também eu acho que sempre está junto. O pino demarcado com o &#8220;1&#8221;, no meu caso é o VCC mesmo, com saída de 3.3v.</p>



<p><strong>GND. </strong>Mas vamos lá, para descobrir isso, utilizei um multímetro e o primeiro pino que tentei descobrir foi o GND que teoricamente é o mais fácil. Coloquei o multímetro em modo de continuidade, para testar continuidade (óbvio), e testei nos quatro pinos se um deles estava conectado ao ground da placa, geralmente o GND está ligado nas carcaças metálicas. E foi isso mesmo, pino 3 dando continuidade com um parafuso da placa, indicando realmente ser o GND.</p>



<p><strong>VCC.</strong> Agora, em modo de medir tensão, conectei a ponta de prova preta ao GND que descobri (pino 3) e a vermelha no pino 1. Marcou 3.34v me indicando que provavelmente aquele era o VCC mesmo. Não dava pra ter certeza, mas a marcação da placa no meu caso, isolando um pouco mais esse pino e demarcando com &#8220;1&#8221;, já me dava certa confiança. Esse pino só é importante encontrar, para que não seja confundido com um TX ou RX, já que não vamos utilizar o VCC.</p>



<p><strong>TX e RX. </strong>Aqui a coisa começa a ficar complicada. Se você tiver um osciloscópio acho que facilitaria, pois seria possível medir as oscilações desses pinos, já que é uma comunicação serial, esses pinos ficam ligando e desligando muito rapidamente, enviando os bits da comunicação. Como não tinha nenhuma ferramente ideal para medição, fui no multimetro barato mesmo. Ao medir identifiquei que os dois pinos ficavam em 3.3v ao ligar a câmera (ponta preta no GND e vermelha no pino que eu queria medir).</p>



<p>Pois bem isso poderia indicar duas coisas, ou é o pino TX ou RX e o meu multímetro por ser mais lento não consegue medir as variações de tensão causadas pela taxa de comunicação ser alta, ou um dos dois pode ainda ser o VCC, já que eu não tinha ainda certeza.</p>



<p>Fiz um teste desligando a câmera enquanto media os pinos. Ao desligar com o multimetro conectado, tanto ao pino 2, quanto ao pino 4, a tensão ia a zero imediamente, indicando, pra mim, fim de comunicação.</p>



<p>Ao fazer o mesmo teste com o multimetro no pino 1 (VCC) a tensão não ia a zero imediatamente, mas ainda permaneciam alguns milivolts por alguns segundos antes de ir a zero. Pra mim, indicando algum capacitor ainda em descarga e me dando mais certeza de que aquele era mesmo o VCC, logo sobravam os pinos 2 e 4 como TX e RX, ainda não sabendo qual era qual.</p>



<p>Fim da história, soldei 3 fios, preto no pino 3 (GND), verde no pino 2 e laranja no pino 4. Como ainda não tinha certeza qual era o RX e qual era o TX, resolvi ligar e testar assim mesmo.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="780" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/fios-soldados-1024x780.jpg" alt="" class="wp-image-2026" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/fios-soldados-1024x780.jpg 1024w, https://genilto.com/wp-content/uploads/sites/2/2020/11/fios-soldados-300x229.jpg 300w, https://genilto.com/wp-content/uploads/sites/2/2020/11/fios-soldados-768x585.jpg 768w, https://genilto.com/wp-content/uploads/sites/2/2020/11/fios-soldados-1536x1170.jpg 1536w, https://genilto.com/wp-content/uploads/sites/2/2020/11/fios-soldados-2048x1560.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<h2 class="wp-block-heading">USB to TTL (usando um NodeMCU queimado!)</h2>



<p>Vocês devem saber que para fazer uma comunicação serial com o computador é necessário um conversor USB-TTL, que é bem fácil de achar pra comprar e bem barato.</p>



<p>Por exemplo: <a href="https://s.click.aliexpress.com/e/_A88LJ0" target="_blank" rel="noreferrer noopener">https://s.click.aliexpress.com/e/_A88LJ0</a></p>



<p>Mas eu não estava com paciência de esperar.</p>



<p>Na internet encontrei alguns posts falando que é possível utilizar o arduino como USB-TTL. E isso me deu umas idéias.</p>



<p>Como tinha aqui em casa arduino uno, esp32 e esp8266, os últimos dois embarcados nas famosas placas nodemcu, que já possuem embutidos os chips conversores para comunicação serial com o USB do computador, de forma que você consegue facilmente espetar seu ESP diretamente no USB e sair programando pra ele sem se incomodar com conversores (Olha só!)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="837" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-1024x837.jpg" alt="" class="wp-image-2027" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-1024x837.jpg 1024w, https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-300x245.jpg 300w, https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-768x628.jpg 768w, https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu.jpg 1162w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Caso queira comprar um nodemcu desse, vou deixar o link de onde você pode comprar. Compro sempre no aliexpress, demora um pouco pra chegar, entre 20 a 30 dias, mas vem certinho.</p>



<p>Nodemcu: <a href="https://s.click.aliexpress.com/e/_AkN0OS" target="_blank" rel="noreferrer noopener">https://s.click.aliexpress.com/e/_AkN0OS</a></p>



<p><strong>Detalhe importante:</strong> como o esp8266 embarcado no meu nodemcu estava queimado e não funcionava mais, resolvi fazer umas experiências com ele.</p>



<p>Como ao conectar o nodemcu no usb ele ainda reconhecia, isso indicava pra mim que o conversor USB-Serial dele ainda estava funcionando. Apenas o esp8266 é que tinha morrido, então se eu tentasse, por exemplo, enviar algum código pra ele, ele não respondia. </p>



<p>Logo, a idéia foi remover completamente o esp8266 do nodemcu e utilizar o conversor de lá, ligando os fios correspondentes ao GND, TX e RX deiretamente. Para remover, utilizei o estanhador mesmo, não é o indicado, mas não tinha outro meio. Alguns pinos foram arrancados, mas os que eu precisava ficaram instactos, ainda bem.</p>



<p>ESP8266 removido (veja que na foto já tem os fios ligados, Verde: TX, Laranja: RX, Preto: GND):</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="908" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-removido-esp8266-1024x908.jpg" alt="" class="wp-image-2028" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-removido-esp8266-1024x908.jpg 1024w, https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-removido-esp8266-300x266.jpg 300w, https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-removido-esp8266-768x681.jpg 768w, https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-removido-esp8266-1536x1362.jpg 1536w, https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-removido-esp8266-2048x1817.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<p>Abaixo a ligação dos fios nos pinos correspondentes. Essa imagem demonstra como encontrei os pinos no nodemcu. Isso foi muito fácil pois embaixo do esp8266 tinha já a marcação de cada pino, então, foi só olhar onde estava ligado e soldar. Bem fácil.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="420" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-ligacao-fios-1024x420.jpg" alt="" class="wp-image-2029" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-ligacao-fios-1024x420.jpg 1024w, https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-ligacao-fios-300x123.jpg 300w, https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-ligacao-fios-768x315.jpg 768w, https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-ligacao-fios-1536x630.jpg 1536w, https://genilto.com/wp-content/uploads/sites/2/2020/11/nodemcu-ligacao-fios-2048x841.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Preto: GND, Verde: TX, Laranja: RX</figcaption></figure>



<p></p>



<h2 class="wp-block-heading">Ligação do USB-TTL com o UART da Câmera</h2>



<p><strong>IMPORTANTE: </strong>Um ponto importante é sempre se atentar a tensão dos equipamento que você está conectando. Por exemplo, se você for utilizar um arduíno como conversor USB-Serial nessa câmera, eu recomendaria utilizar um conversor de nível lógico bidirecional de 5v para 3.3v (ou um divisor de tensão), uma vez que o arquino trabalha com 5v, e a câmera, a gente viu que trabalha a 3.3v. Ligar 5v ali poderia danificar a câmera.</p>



<p>No caso do nodemcu, ele já trabalha com 3.3v, pois o esp8266 também trabalha nessa tensão, então tudo perfeito, não precisei fazer nenhuma conversão.</p>



<p><strong>Continuando</strong>, a primeira vez que liguei a câmera no nodemcu e liguei no computador, nada aconteceu. Isso porque o RX e o TX estava ligados no mesmo ou seja, RX com RX e TX com TX. O Correto é ligar ao contrário, RX com TX e TX com RX.</p>



<p>GND deve ser ligado com GND. Não esqueça dele.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="373" height="226" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/rx-tx.png" alt="" class="wp-image-2032" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/rx-tx.png 373w, https://genilto.com/wp-content/uploads/sites/2/2020/11/rx-tx-300x182.png 300w" sizes="auto, (max-width: 373px) 100vw, 373px" /><figcaption>Fonte da imagem: https://medium.com/@shubhamgolam10/reverse-engineering-uart-to-gain-shell-de9019ae427a</figcaption></figure></div>



<p>Mascomo vimos, eu nem sabia quem era o TX e o RX da câmera. Descobri quando não funcionou e ao inverter funcionou. rsrsrs Não sei se pode ocorrer algum problema ao ligar isso invertido, mas no meu caso nada foi danificado.</p>



<p><strong>Então ficou assim:</strong></p>



<ul class="wp-block-list"><li>Fio preto da camera(GND) ligado ao preto do nodemcu</li><li>Fio Verde da camera (TX) ligado ao laranja do nodemcu (RX)</li><li>Fio Laranja da camera (RX) ligado ao verde do nodemcu (TX)</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="567" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/ligacao-pc-nodemcu-camera-1024x567.jpg" alt="" class="wp-image-2040" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/ligacao-pc-nodemcu-camera-1024x567.jpg 1024w, https://genilto.com/wp-content/uploads/sites/2/2020/11/ligacao-pc-nodemcu-camera-300x166.jpg 300w, https://genilto.com/wp-content/uploads/sites/2/2020/11/ligacao-pc-nodemcu-camera-768x425.jpg 768w, https://genilto.com/wp-content/uploads/sites/2/2020/11/ligacao-pc-nodemcu-camera-1536x850.jpg 1536w, https://genilto.com/wp-content/uploads/sites/2/2020/11/ligacao-pc-nodemcu-camera-2048x1134.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Lendo a comunicação Serial</h2>



<p>Uma das dúvidas que eu tinha era como ler essa comunicação no computador. Primeiro fui no velho conhecido arduino IDE, selecionei a porta onde o nodemcu modificado estava conectado, e abri o serial monitor. Se conhece o arduino sabe do que estou falando.</p>



<p>Incrível ver como aquilo <strong>não tinha funcionado</strong>. Primeiro, por que nada aconteceu, então resolvi inverter o fios do tx e rx, como mencionando acima. Depois disso, vualá, um monte de caracteres estranhos começaram a aparecer na tela:</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/arduino-9600baud.png" alt="" class="wp-image-2033" width="580" height="524" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/arduino-9600baud.png 845w, https://genilto.com/wp-content/uploads/sites/2/2020/11/arduino-9600baud-300x271.png 300w, https://genilto.com/wp-content/uploads/sites/2/2020/11/arduino-9600baud-768x694.png 768w" sizes="auto, (max-width: 580px) 100vw, 580px" /></figure>



<p></p>



<p>Isso me indicava uma coisa,o tal do <strong>BAUD RATE</strong> estava errado. </p>



<h3 class="wp-block-heading">Descobrindo o BAUD RATE</h3>



<p>Não vou explicar exatamente o que é isso, mas em resumo, é a velocidade de comunicação que está sendo utilizada naquela comunicação. Se você programa arduino já viu que é possível definir a taxa desejada que você quer utilizar na comunicação. Logo, fui testando outras ali no monitor serial do arduino até aparecer alguma coisa legível.</p>



<p>Existem outras formas de descobrir o baud rate, inclusive tem algumas formas nos links que coloquei ali em baixo nas referências. Mas eu achei mais fácil do jeito que fiz.</p>



<p>Em resumo, e pelo que vi a grande maioria das câmeras utilizam baud rate de <strong>115200</strong>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="662" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/serial-arduino-1024x662.png" alt="" class="wp-image-2034" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/serial-arduino-1024x662.png 1024w, https://genilto.com/wp-content/uploads/sites/2/2020/11/serial-arduino-300x194.png 300w, https://genilto.com/wp-content/uploads/sites/2/2020/11/serial-arduino-768x496.png 768w, https://genilto.com/wp-content/uploads/sites/2/2020/11/serial-arduino.png 1238w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Selecionando a porta correta e definindo o baud rate correto, é possível verificar o que a câmera envia pela comunicação serial.</figcaption></figure>



<p><strong>Um detalhe importante</strong>, esse print da imagem acima, eu fiz depois de a câmera já estar funcionando corretamente. Antes, a mensagem que ocorria na parte do &#8220;Uncompressing Linux&#8230; done, booting the kernel.&#8221; era um erro mais ou menos assim:</p>



<p><code>Uncompressing Linux…undefined instruction</code></p>



<p>Por isso a câmera não ligava mais, pois tinha alguma coisa corrompida no firmware atual.</p>



<h3 class="wp-block-heading">Usando o Minicom</h3>



<p>Para que fosse possível acessar o serial como se fosse um terminal e executar comandos na câmera foi necessário utilizar um outro software, no meu caso utilizei o minicom, como estou utilizando o Ubuntu acabei achando mais fácil. A instalação é trivial, com um simples <strong>sudo apt install minicom</strong> e está tudo certo.</p>



<p>Se você estiver no mac, pode usar o minicom também e instalar via homebrew. Se estiver no windows, não sei dizer ao certo, mas acho que não tem minicom. Então vai ter que achar alternativas como o <strong>putty</strong>, senão estou enganado.</p>



<p>Como vimos, nossa comunicação está funcionando a partir do dispositivo <strong>/dev/ttyUSB0</strong> que é onde plugamos o usb com o nodemcu. sabendo disso podemos acessar o minicom digitando no terminal:</p>



<p><code>minicom -D /dev/ttyUSB0</code></p>



<p>Não esqueça de fechar o serial monitor do arduino, senão pode ter um erro como abaixo:</p>



<p>minicom: cannot open /dev/ttyUSB0: Device or resource busy</p>



<p>Enfim, você deve conectar o USB-TTL e iniciar o minicom sem ligar a câmera. O Minicom irá conectar na interface USB e aguardar comunicação. Ao ligar a câmera, verá os dados que a câmera envia diretamente no seu terminal:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="743" height="798" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-first.png" alt="" class="wp-image-2037" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-first.png 743w, https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-first-279x300.png 279w" sizes="auto, (max-width: 743px) 100vw, 743px" /></figure>



<p>Agora, preste atenção onde eu marquei com essa linda seta. Esta dizendo para pressionar CTRL + C para interromper o autoboot.</p>



<p>Isso quer dizer que se der ctrl+c antes do boot começar, ele interrompe o boot e te dá acesso ao prompt da câmera. E ISSO É FANTÁSTICO!</p>



<p>Uma dica é ficar apertando CTRL+C antes de ligar e enquanto liga a camera na energia, senão é difícil de conseguir antes do autoboot.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="618" height="794" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-help.png" alt="" class="wp-image-2039" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-help.png 618w, https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-help-234x300.png 234w" sizes="auto, (max-width: 618px) 100vw, 618px" /></figure>



<p>Ao entrar no prompt alguns comandos ficam disponíveis, no exemplo da imagem, digitei <strong>help</strong> e pressionei enter. O resultado é uma lista de comandos disponíveis no sistema da câmera.</p>



<p>Vou falar sobre alguns importantes:</p>



<h4 class="wp-block-heading"><strong>setenv</strong> &#8211; set environment variables</h4>



<p>Utilizaremos para alterar algumas variáveis de ambiente, como por exemplo, o serverip, que será o ip do servidor tftp que iremos configurar.</p>



<h4 class="wp-block-heading">run &#8211; run commands in an environment variable</h4>



<p>É um comando interessante, afinal, nos diz que roda comandos que estão armazenados em variáveis de ambiente. <strong>Isso significa que existem variáveis de ambiente que possuem comandos a serem executados!</strong></p>



<h4 class="wp-block-heading"><strong>printenv</strong> &#8211; print environment variables</h4>



<p>Exibe pra nós a lista das variáveis de ambiente, você verá como isso é importante, pois teremos que alterar algumas variáveis mais tarde, para que nosso processo funcione corretamente, e também veremos as variáveis com os comandos que devemos executar.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="778" height="526" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-printenv.png" alt="" class="wp-image-2041" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-printenv.png 778w, https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-printenv-300x203.png 300w, https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-printenv-768x519.png 768w" sizes="auto, (max-width: 778px) 100vw, 778px" /></figure>



<p>Sobre as variáveis de ambiente, notamos algumas como <strong>ipaddr</strong>, que contém o ip atual da camera, <strong>serverip</strong>, que seria o servidor de tftp que ela irá utilizar na horas de buscar os arquivos para fazer o update, e também existem algumas muito interessantes como é o caso dos <strong>da, dc, dr</strong>, etc. </p>



<p>Se você perceber, o conteúdo delas é uma série de comandos específicos. Por exemplo, vamos analisar o conteúdo da variável <strong>da</strong>:</p>



<p><strong>da=mw.b 0x81000000 ff 800000;tftp 0x81000000 u-boot.bin.img;sf probe 0;flwrite</strong></p>



<p>Parece estar dizendo para fazer um memory write (<strong>mw.b</strong>) começando em <strong>0x81000000</strong> do  <strong>&#8216;ff&#8217;</strong> até os próximos <strong>800000</strong> bits, e então executar um <strong>tftp</strong> (conectando no servidor definido na variável <strong>serverip</strong>) buscando o arquivo <strong>u-boot.bin.img </strong>começando a escrever em <strong>0x81000000</strong> e então verifica o dispositivo no bus <strong>0</strong> e finalmente grava na flash com o <strong>flwrite</strong>.</p>



<p>Vendo isso, percebemos que será necessário ter os arquivos <strong>.img</strong> para serem gravados, e também precisamos de um servidor tftp para deixar esses arquivos disponíveis e, só então executar esses comandos utilizando o comando <strong>run (run commands in an environment variable</strong>).</p>



<h3 class="wp-block-heading">Baixando os arquivos do firmware</h3>



<p>Aqui vai depender da sua câmera, você terá que identificar qual fabricante, modelo e tudo isso, e tentar encontrar os arquivos no site da fabricante.</p>



<p>No meu caso, a Besder, que é a marca onde comprei a câmera, possui como fabricante a xiongmaitech, que também tem várias outras marcas vendendo os mesmo produtos, só que com marca diferente, bem típico, rsrs.</p>



<p>Então, se tiver com uma câmera da xiongmaitech, os passos serão bem parecidos, senão vai ter que ver como encontrar por você mesmo. Se não for, eu nem sei se esses passos todos funcionarão. </p>



<p><strong>Se você quiser saber se sua câmera é uma xiongmai, talvez esse post possa ajudar:</strong></p>



<p><a href="https://sec-consult.com/en/blog/2018/10/millions-of-xiongmai-video-surveillance-devices-can-be-hacked-via-cloud-feature-xmeye-p2p-cloud/#BlogPostXiongmai(XMeyeP2PCloud)-HowtoidentifyaXiongmaidevice">https://sec-consult.com/en/blog/2018/10/millions-of-xiongmai-video-surveillance-devices-can-be-hacked-via-cloud-feature-xmeye-p2p-cloud/#BlogPostXiongmai(XMeyeP2PCloud)-HowtoidentifyaXiongmaidevice</a></p>



<h5 class="wp-block-heading">Identificando o modelo do seu dispositivo</h5>



<p>Identifique o modelo exato da sua câmera. No meu caso, eu tenho duas câmeras idênticas, logo, consegui entrar nas informações do dispositivo da que funciona e pegar essas informações conforme a imagem, se você não tem outra que funciona pra ver isso, pra ser sincero, eu não sei como fazer. </p>



<p>Bem entrando nas configurações da câmera no ICSee consigo ver essas informações conforme abaixo:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="492" height="1024" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/identificar-modelo-camera-492x1024.jpg" alt="" class="wp-image-2047" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/identificar-modelo-camera-492x1024.jpg 492w, https://genilto.com/wp-content/uploads/sites/2/2020/11/identificar-modelo-camera-144x300.jpg 144w, https://genilto.com/wp-content/uploads/sites/2/2020/11/identificar-modelo-camera-768x1597.jpg 768w, https://genilto.com/wp-content/uploads/sites/2/2020/11/identificar-modelo-camera-739x1536.jpg 739w, https://genilto.com/wp-content/uploads/sites/2/2020/11/identificar-modelo-camera-985x2048.jpg 985w, https://genilto.com/wp-content/uploads/sites/2/2020/11/identificar-modelo-camera.jpg 1080w" sizes="auto, (max-width: 492px) 100vw, 492px" /></figure>



<p>Veja onde sublinhei, são a versão do dispositivo e a versão do software. Essas informações sublinhadas você vai precisar para encontrar seu firmware corretamente.</p>



<p>Então no meu caso:</p>



<p><strong>Versão do dispositivo:</strong> 50X20-WG</p>



<p><strong>Versão do software:</strong> Aqui precisamos apenas do<strong> 000309c1</strong></p>



<h5 class="wp-block-heading">Encontrando o firmware correto do seu dispositivo</h5>



<p>Eu encontrei no site da xiongmaitech a página de download de drivers. Porém, tem que ser na versão em chinês, já que a versão em inglês do site não tem nada pra download.</p>



<p>Dessa forma, ativei a tradução para inglês no chrome mesmo, e fui procurando pelo drive que eu queria.</p>



<p>Link para download: <a href="http://www.xiongmaitech.com/service/down_detail1/13/2/5">http://www.xiongmaitech.com/service/down_detail1/13/2/5</a></p>



<p>No meu caso, estava na página 5. Então tente identificar o correto para o seu modelo. <strong>Não tente se não for exatamente a do seu modelo!</strong></p>



<p>Perceba que está exatamente a versão do dispositivo e a versão do software que encontramos anteriormente no nome do arquivo a ser baixado.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="907" height="637" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/download-firmware-camera.png" alt="" class="wp-image-2048" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/download-firmware-camera.png 907w, https://genilto.com/wp-content/uploads/sites/2/2020/11/download-firmware-camera-300x211.png 300w, https://genilto.com/wp-content/uploads/sites/2/2020/11/download-firmware-camera-768x539.png 768w" sizes="auto, (max-width: 907px) 100vw, 907px" /></figure>



<p>Será baixado um arquivo como este:</p>



<p><code><strong>000309C1</strong>.1IPC_XM530_<strong>50X20-WG</strong>_WIFIXM711.711.Nat.dss.OnvifS_V5.00.R02.zip</code></p>



<p>É um arquivo compactado que se descompactado ficará assim:</p>



<p><code>General_IPC_XM530_<strong>50X20-WG</strong>_WIFIXM711.711.Nat.dss.OnvifS_V5.00.R02.20200917_all.bin</code></p>



<p>Um arquivo bin é como um arquivo compactado, nesse caso, caso sua câmera estiver funcionando, você pode atualizar ela diretamente pela interface web dela ou pelo próprio app como o ICSee, informando esse arquivo .bin.</p>



<p>Porém, no meu caso, não está funcionando, se tivesse eu não estaria passando por todo esse trabalho, não é mesmo?</p>



<p>Dessa forma, para que possamos gravar o firmware, teremos que fazer isso por partes. Como falei, o arquivo <strong>.bin</strong> nada mais é do que um arquivo compactado, no mac e no linux, é possível descompactar normalmente, no windows, não tenho certeza, mas se renomear a extensão para .zip será possível descompactar também.</p>



<p>Os arquivos descompactados ficarão assim:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="439" height="426" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/arquivos-firmware-1.png" alt="" class="wp-image-2052" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/arquivos-firmware-1.png 439w, https://genilto.com/wp-content/uploads/sites/2/2020/11/arquivos-firmware-1-300x291.png 300w" sizes="auto, (max-width: 439px) 100vw, 439px" /></figure>



<p>Perceba que temos vários arquivos .img que iremos gravar na nossa câmera.</p>



<p>O Arquivo InstallDesc possui os passos a serem seguidos para a atualização. Imagino que a atualização via interface web utilize esse arquivo como configuração de execução do update.</p>



<h4 class="wp-block-heading">Instalando o servidor TFTP para servir os arquivos da atualização</h4>



<p>Como comentei, para atualizar a câmera, é necessário que ela possua uma maneira de baixar facilmente esses arquivos para atualizar. A forma que essas câmeras utilizam é a transferência dos arquivos via TFTP. </p>



<p>TFTP é uma forma de transferência de arquivos geralmente utilizada em redes, e tem um conceito de simplicidade, não necessitando sequer um usuário e senha para ter acesso aos arquivos.</p>



<p>Para instalar o servidor no linux utilizei o passo a passo deste post: <a rel="noreferrer noopener" href="https://linuxhint.com/install_tftp_server_ubuntu/" target="_blank">https://linuxhint.com/install_tftp_server_ubuntu/</a></p>



<p>Para outros SOs como Mac ou Windows também devem existir servidores TFTP facilmente configuráveis.</p>



<p>O requisito principal é que os arquivos de firmware extraídos estejam disponíveis através do TFTP. Então coloque todos eles na raiz do seu servidor TFTP, por exemplo, se a pasta a qual seu servidor TFTP serve é <strong>/usr/tftp,</strong> como no meu caso, então coloque os arquivos diretamente lá dentro, sem subdiretórios.</p>



<p>Para testar se está funcionando, você pode tentar acessar o tftp e baixar algum dos arquivos, por exemplo, usando o client TFTP no ubuntu (192.168.2.144 é o IP do computador onde eu instalei o servidor do TFTP, no caso o meu próprio computador):</p>



<pre class="wp-block-code"><code>genilto@ubuntu-1525:~$ tftp 192.168.2.144
tftp> get u-boot.bin.img
Received 196756 bytes in 0.1 seconds
tftp> q
genilto@ubuntu-1525:~$ ls
Desktop Documents Downloads Music Pictures Public snap Templates u-boot.bin.img Videos</code></pre>



<p>É interessante você verificar se o firewall do seu computador não está bloqueando o acesso a partir de outra máquina na rede.</p>



<p>Se deu certo pra você e conseguiu baixar o arquivo como no exemplo, podemos seguir para o próximo passo!</p>



<h3 class="wp-block-heading">Aplicando a atualização</h3>



<p>Lá em cima, onde falei das variáveis de ambiente já dei um spoiler do que deve ser feito. Mas vamos ver com calma passo a passo agora.</p>



<p>Primeiro, temos que garantir que a câmera está conectada na rede e que consegue acessar o serviço do tftp.</p>



<p><strong>Primeiro, conecte sua câmera no cabo ethernet.</strong></p>



<p>Depois, configure as variáveis de ambiente <strong>ipaddr</strong> com o ip que será atribuído para a câmera e o <strong>serverip</strong> com o ip onde instalamos e configuramos nosso servidor tftp que servirá os arquivos para atualização. Para definir as variáveis de ambiente utilize o <strong>setenv.</strong></p>



<pre class="wp-block-code"><code>setenv ipaddr 192.168.2.999</code></pre>



<pre class="wp-block-code"><code>setenv serverip 192.168.2.144</code></pre>



<p>No meu caso deixei a câmera com o IP fixo 192.168.2.999, de forma que não de conflito com outros dispositivos, e configurei o <strong>serverip</strong> com o IP 192.168.2.144 que é o IP do meu computador onde está instalado e configurado o servidor de TFTP.</p>



<p>Agora basta salvar as alterações com <strong>saveenv</strong>.</p>



<pre class="wp-block-code"><code>saveenv</code></pre>



<p>Agora você deve digitar o comando reset, que irá reiniciar a câmera. Não esqueça do CTRL + C para entrar novamente no U-Boot.</p>



<pre class="wp-block-code"><code>reset</code></pre>



<p>É interessante também verificar se o nosso servidor está acessível pela câmera. Pra isso podemos usar o ping! Verifique se o resultado diz que o host que você digitou <strong>&#8220;is alive&#8221;</strong>!</p>



<pre class="wp-block-code"><code>ping 192.168.2.144</code></pre>



<p>Agora, vamos avaliar o arquivo InstallDesc que descompactamos junto com os arquivos do firmware:</p>



<pre class="wp-block-code"><code>{
	"UpgradeCommand":	&#91;{
			"Command":	"Burn",
			"FileName":	"u-boot.bin.img"
		}, {
			"Command":	"Burn",
			"FileName":	"u-boot.env.img"
		}, {
			"Command":	"Burn",
			"FileName":	"custom-x.cramfs.img"
		}, {
			"Command":	"Burn",
			"FileName":	"uImage.img"
		}, {
			"Command":	"Burn",
			"FileName":	"romfs-x.cramfs.img"
		}, {
			"Command":	"Burn",
			"FileName":	"user-x.cramfs.img"
		}],
	"Hardware":	"XM530_50X20-WG_8M",
	"DevID":	"000309C11001000000600000",
	"WifiDriverType":	"xm711",
	"CompatibleVersion":	3,
	"Vendor":	"General",
	"CRC":	"802001675000",
	"Mx8Q":	"vS8ufwq7xiPTLLQoLObf+qMAcyr7M3GevHMxdFYPHJk4z4DLsle1330VhYxCMpPMqBqZYVVt+zm9NZ10FlH2p/YuDkCcYM0GsRPq0nWOP7DlS13Owwa+G/7vxIwTYD9m4gJNXNclaTIzHln1K1GRarwE9qMIJiV9r1pbwwba887TWv4="
}</code></pre>



<p>Nesse arquivo podemos ver o passo a passo a ser seguido para aplicar a atualização. Cada Command Burn, indica um arquivo <strong>.img</strong> que deve ser gravado. Perceba que todos esses arquivos estão presentes no mesmo arquivo que baixamos do firmware.</p>



<p>Imagino que seja muito interessante seguir exatamente essa ordem definida nesse arquivo ao atualizarmos </p>



<p>Vamos entrar novamente no minicom e acessar a câmera. Novamente, vamos analisar as variáveis de ambiente que temos no sistema da câmera, utilizando o comando <strong>printenv</strong>:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="778" height="526" src="https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-printenv.png" alt="" class="wp-image-2041" srcset="https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-printenv.png 778w, https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-printenv-300x203.png 300w, https://genilto.com/wp-content/uploads/sites/2/2020/11/minicom-printenv-768x519.png 768w" sizes="auto, (max-width: 778px) 100vw, 778px" /></figure>



<p>Acho que agora ficou bem mais claro o que expliquei lá em cima sobre as variáveis de ambiente &#8220;da&#8221;, &#8220;dc&#8221;, &#8220;dr&#8221;, &#8220;du&#8221;, certo?</p>



<p>Muito bem, o que precisamos fazer agora, é avaliar o seguinte, baseado no arquivo InstallDesc:</p>



<ul class="wp-block-list"><li>O primeiro arquivo que devemos gravar é: <strong>u-boot.bin.img</strong>, então nesse caso podemos rodar os comandos da variável <strong>&#8220;da&#8221;</strong>, que vai baixar esse arquivo.</li></ul>



<pre class="wp-block-code"><code>run da</code></pre>



<ul class="wp-block-list"><li>O Segundo arquivo é <strong>u-boot.env.img</strong>. Neste caso, e no meu caso pelo menos, nenhuma variável de ambiente referencia esse arquivo. Logo, o que eu fiz foi criar um baseado nos outros comandos, seguindo exatamente o mesmo padrão. Lendo o resultado, percebi um erro de <strong>can`t write to protected Flash sectors.</strong> Porém mesmo assim segui em frente. O comando ficou assim:</li></ul>



<pre class="wp-block-code"><code>mw.b 0x81000000 ff 800000;tftp 0x81000000 u-boot.env.img;sf probe 0;flwrite</code></pre>



<ul class="wp-block-list"><li>O terceiro arquivo é o <strong>custom-x.cramfs.img</strong>. Este está referenciado na variável de ambiente &#8220;dc&#8221;. Então basta rodar diretamente a variável com o comando:</li></ul>



<pre class="wp-block-code"><code>run dc</code></pre>



<ul class="wp-block-list"><li>O quarto arquivo <strong>uImage.img</strong>, também não está presente em nenhuma das variáveis de ambiente. Importante, esqueça a variável &#8220;tk&#8221; mesmo ela tendo uma referência a uImage, ela não grava nada, só dá boot no sistema utilizando uma imagem existente, pelo que entendi. Então criei novamente um comando para gravação dessa imagem, que foi executado com sucesso:</li></ul>



<pre class="wp-block-code"><code>mw.b 0x81000000 ff 800000;tftp 0x81000000 uImage.img;sf probe 0;flwrite</code></pre>



<ul class="wp-block-list"><li>O quinto arquivo, <strong>romfs-x.cramfs.img</strong>, é referenciado na variável &#8220;dr&#8221;, então:</li></ul>



<pre class="wp-block-code"><code>run dr</code></pre>



<ul class="wp-block-list"><li>E o sexto e último arquivo, user-x.cramfs.img, é referenciado na varíavel &#8220;du&#8221;. Mais um simples:</li></ul>



<pre class="wp-block-code"><code>run du</code></pre>



<p>Se tudo deu certo, você pode simplesmente dar um reset novamente, e deixar a câmera ligar normalmente. No meu caso o erro &#8220;Uncompressing Linux…undefined instruction&#8221; desapareceu e a câmera voltou a vida.</p>



<p>Sucesso rapazeada!</p>



<h2 class="wp-block-heading">Referências</h2>



<p>Alguns posts que encontrei e foram muito úteis:</p>



<ul class="wp-block-list"><li>Estes posts abaixo me ajudaram a entender como encontrar os pinos UART na placa da minha câmera:<ul><li><a rel="noreferrer noopener" href="http://www.devttys0.com/2012/11/reverse-engineering-serial-ports/" target="_blank">http://www.devttys0.com/2012/11/reverse-engineering-serial-ports/</a></li><li><a rel="noreferrer noopener" href="https://jcjc-dev.com/2016/04/08/reversing-huawei-router-1-find-uart/" target="_blank">https://jcjc-dev.com/2016/04/08/reversing-huawei-router-1-find-uart/</a></li><li><a rel="noreferrer noopener" href="https://medium.com/@shubhamgolam10/reverse-engineering-uart-to-gain-shell-de9019ae427a" target="_blank">https://medium.com/@shubhamgolam10/reverse-engineering-uart-to-gain-shell-de9019ae427a</a></li></ul></li><li>Nesse tópico do site <a rel="noreferrer noopener" href="https://ipcamtalk.com/threads/ooops-looks-like-i-bricked-my-cam.47767/" target="_blank">IPCAMTALK.COM</a>, é discutido um problema igual a este, grande parte do que fiz foi por causa dessa discussão:<ul><li><a rel="noreferrer noopener" href="https://ipcamtalk.com/threads/ooops-looks-like-i-bricked-my-cam.47767/" target="_blank">https://ipcamtalk.com/threads/ooops-looks-like-i-bricked-my-cam.47767/</a></li></ul></li><li>Passo a passo que segui para instalar o servidor TFTP no Linux<ul><li><a href="https://linuxhint.com/install_tftp_server_ubuntu/" target="_blank" rel="noreferrer noopener">https://linuxhint.com/install_tftp_server_ubuntu/</a></li></ul></li></ul>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/revivendo-uma-camera-ip-chinesa/feed/</wfw:commentRss>
			<slash:comments>51</slash:comments>
		
		
			</item>
		<item>
		<title>OpenSource! Criptografador simples em Javascript!</title>
		<link>https://genilto.com/opensource-criptografador-simples-em-javascript/</link>
					<comments>https://genilto.com/opensource-criptografador-simples-em-javascript/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Sun, 11 Oct 2020 00:31:57 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[criptografador]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=2014</guid>

					<description><![CDATA[Esses dias achei alguns projetos meus antigos. Os que achei mais úteis estou colocando no github pra quem quiser dar uma avaliada. Mas assim, são projetos mais antigos, da época ...]]></description>
										<content:encoded><![CDATA[
<p>Esses dias achei alguns projetos meus antigos. Os que achei mais úteis estou colocando no github pra quem quiser dar uma avaliada.</p>



<p>Mas assim, são projetos mais antigos, da época da faculdade ainda. Então, use sob sua conta e risco, se quiser colaborar e melhorar o código, fique a vontade!!!</p>



<p>Este é um criptografador bem simples desenvolvido apenas com HTML e JS.</p>



<p>Com a chave certa, você poderá criptografar textos que só poderão ser descriptografados tendo o mesmo algoritmo e a mesma chave.</p>



<p>Faz tempo, mas usei bastante para enviar e-mails para minha namorada enquanto ela estava no trabalho. Ela tinha um e-mail compartilhado com outras pessoas lá, então, só ela conseguia ler minhas mensagens.</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>Mas ninguém pode saber disso.</p>



<p>Projeto do GitHub:</p>



<p><a href="https://github.com/genilto/criptografador-js">https://github.com/genilto/criptografador-js</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/opensource-criptografador-simples-em-javascript/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Episódio 2 &#8211; O segredo do Bosque</title>
		<link>https://genilto.com/episodio-2-o-segredo-do-bosque/</link>
					<comments>https://genilto.com/episodio-2-o-segredo-do-bosque/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Tue, 25 Aug 2020 02:33:46 +0000</pubDate>
				<category><![CDATA[Flores do Campo]]></category>
		<category><![CDATA[crime]]></category>
		<category><![CDATA[episodio 1]]></category>
		<category><![CDATA[fatos reais]]></category>
		<category><![CDATA[Flores do campo]]></category>
		<category><![CDATA[O inicio]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1996</guid>

					<description><![CDATA[Era uma tarde de sol como qualquer outra. Era possível ouvir os pássaros cantando de longe, porém, algo a incomodava. Não haviam pássaros naquele bosque. O que a intrigava era ...]]></description>
										<content:encoded><![CDATA[
<p>Era uma tarde de sol como qualquer outra. Era possível ouvir os pássaros cantando de longe, porém, algo a incomodava. Não haviam pássaros naquele bosque.</p>



<p>O que a intrigava era o fato de que ela, e apenas ela, conseguia se aproximar. Os cães paravam pelo caminho, e nenhum outro animal parecia existir por lá.</p>



<p>Mas ela tinha que fazer isso, afinal promessas não podem ser quebradas.</p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Episódio 2 - O Segredo do Bosque" width="800" height="450" src="https://www.youtube.com/embed/T-Fk51g-AXQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>Ainda quer tentar entender essa história?<br />Descubra no próximo episódio&#8230;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><em>PS: Assista esta série sob sua própria conta e risco.</em></p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/episodio-2-o-segredo-do-bosque/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Episódio 1 &#8211; O início</title>
		<link>https://genilto.com/ep001-o-inicio/</link>
					<comments>https://genilto.com/ep001-o-inicio/#comments</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Fri, 21 Aug 2020 01:16:43 +0000</pubDate>
				<category><![CDATA[Flores do Campo]]></category>
		<category><![CDATA[crime]]></category>
		<category><![CDATA[episodio 1]]></category>
		<category><![CDATA[fatos reais]]></category>
		<category><![CDATA[Flores do campo]]></category>
		<category><![CDATA[O inicio]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1985</guid>

					<description><![CDATA[Baseado em fatos terrivelmente reais. Era uma terrível noite gelada. Ventos cortantes e a escuridão tomavam conta do lugar. Poucos eram os que se arriscavam a sair de suas casas. ...]]></description>
										<content:encoded><![CDATA[
<p><s>Baseado em fatos terrivelmente reais.</s></p>



<p>Era uma terrível noite gelada. Ventos cortantes e a escuridão tomavam conta do lugar. Poucos eram os que se arriscavam a sair de suas casas.</p>



<p>Todos buscavam um refúgio e algo quente para saciar sua sede de vingan.. digo, sede de algo para esquentar o corpo.</p>



<p>&#8211; Corpo? Que corpo? Não matamos ninguém ainda. Não é?<br />&#8211; E nem vamos matar, você quiz dizer, não é mesmo? E vê se me deixa continuar, por favor&#8230;</p>



<p>Como eu estava dizendo, é impossível descrever o que ocorreu naquela noite fatídica. Era possível apenas ouvir os passos horríveis do crime que viria a acontecer.</p>



<p>&#8211; Aháa, um corpo, eu sabia!<br />&#8211; Esquece o corpo, não tem corpo! Mas sim, um crime&#8230;</p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Episódio 1 - O início" width="800" height="450" src="https://www.youtube.com/embed/6XW_X7rbXFY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>Quer saber o que o café tem a ver com essa história?<br />Descubra no próximo episódio&#8230;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>PS: Assista esta série sob sua própria conta e risco.</p></blockquote>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/ep001-o-inicio/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Instalação LineageOS 17.1 com Android 10 no Galaxy J7!</title>
		<link>https://genilto.com/instalacao-lineageos-17-1-com-android-10-no-galaxy-j7/</link>
					<comments>https://genilto.com/instalacao-lineageos-17-1-com-android-10-no-galaxy-j7/#comments</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Sat, 11 Jul 2020 22:56:22 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[lineageos]]></category>
		<category><![CDATA[samsung j7]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1968</guid>

					<description><![CDATA[Galera! Espero que todos estejam bem. Hoje resolvi fazer um resumo dos passos que segui para instalar o LineageOS no Galaxy J7 (SM-j700M). Em resumo, o celular já não respondia ...]]></description>
										<content:encoded><![CDATA[
<p>Galera! Espero que todos estejam bem.</p>



<p>Hoje resolvi fazer um resumo dos passos que segui para instalar o LineageOS no Galaxy J7 (SM-j700M).</p>



<p>Em resumo, o celular já não respondia muito bem, estava travando demais, e a bateria durava no máximo 7 horas, sem uso, e já era necessário carregar.</p>



<p>A experiência que tive com o LineageOS, foi uma utilização muuuito mais fluida e a bateria durando uns dois dias, e isso com um uso moderado, com wifi desligado apenas a noite.</p>



<p>Quero deixar os créditos aqui, então, basicamente eu segui esses passos aqui:<br /><a rel="noreferrer noopener" href="https://www.cyanogenmods.org/lineage-os-17-1-galaxy-j7/" target="_blank">https://www.cyanogenmods.org/lineage-os-17-1-galaxy-j7</a><br />E mais alguns também, que são citados abaixo.<br />Vou colocar os links que usei, mas lembre-se que esses arquivos são para exatamente o modelo SM-J700M ou j7elte. </p>



<p class="has-text-color has-background has-very-light-gray-color has-luminous-vivid-amber-background-color"><strong>Se não for esse o seu modelo, não use esses arquivos, procure os que são exatamente para o seu modelo!!</strong></p>



<p>Utilizei o windows em alguns pontos e o Mac em outros, mas acredito que dê para fazer tudo no windows sem problemas. Abaixo os passos que segui.</p>



<p class="has-text-color has-background has-very-light-gray-color has-vivid-red-background-color">Instalar uma Custom ROM irá fazer com que você perca a garantia do seu aparelho, além de ser um processo perigoso podendo inclusive danificá-lo caso feito de forma errada. Então, faça o processo por SUA CONTA E RISCO.</p>



<h2 class="wp-block-heading">Intalar o TWRP</h2>



<p class="has-background has-very-light-gray-background-color"><strong>Passo 1. Caso não tenha, baixar os drivers samsung para o windows e instalar.</strong><br />Pode usar este link na samsung mesmo:<br /><a href="https://developer.samsung.com/mobile/android-usb-driver.html" target="_blank" rel="noreferrer noopener">https://developer.samsung.com/mobile/android-usb-driver.html</a><br />Ou esse do blog na cyanogenmods, antecessora da lineageos:<br /><a rel="noreferrer noopener" href="https://www.cyanogenmods.org/downloads/download-samsung-mobile-phone-usb-driver-v1-5-51-0-for-windows/" target="_blank">https://www.cyanogenmods.org/downloads/download-samsung-mobile-phone-usb-driver-v1-5-51-0-for-windows/</a></p>



<p class="has-text-color has-background has-very-light-gray-color has-cyan-bluish-gray-background-color"><strong>Passo 2. Baixar o Odin:</strong><br /><a rel="noreferrer noopener" href="https://www.cyanogenmods.org/forums/topic/free-odin-download-link-installation-guide/" target="_blank">https://www.cyanogenmods.org/forums/topic/free-odin-download-link-installation-guide/</a></p>



<p class="has-background has-very-light-gray-background-color"><strong>Passo 3. Baixar a TWRP </strong><br />Baixar a versão .tar para ser usada com o Odin<br /><a rel="noreferrer noopener" href="https://dl.twrp.me/j7elte/twrp-3.4.0-0-j7elte.img.tar.html" target="_blank">https://dl.twrp.me/j7elte/twrp-3.4.0-0-j7elte.img.tar.html</a></p>



<p class="has-text-color has-background has-very-light-gray-color has-cyan-bluish-gray-background-color"><strong><a href="https://developer.samsung.com/mobile/android-usb-driver.html">Passo 4. Instalar a custom recovery TWRP</a></strong><br />Não vou descrever os passos aqui, pois segui os passos conforme o link a seguir, então é mais fácil você seguir também. <br /><br />ANTES DESSE PASSO <strong>LEMBRE-SE (IMPORTANTE):</strong><br />a) Os arquivos que o post abaixo pede para baixar, você já baixou, caso tenha seguido os passos até aqui.<br />b) Desabilitar o <strong>OEM Unlock</strong>. Nos passos do post abaixo ele fala como fazer.<br />c) Habilitar também o <strong>USB Debugging</strong>. <br />&#8211;> Open Settings, and select “About”.<br />&#8211;> Tap on “Build number” seven times.<br />&#8211;> Go back, and select “Developer options”.<br />&#8211;> Scroll down, and check the “Android debugging” or “USB debugging” entry under “Debugging”.<br />d) Ao usar o Odin, desmarque a opção &#8220;Auto Reboot&#8221; para que o celular não reinicie sozinho ao termino. Senão ao iniciar novamente, a stock rom da samsung repõe a recovery original.<br />e) Após finalizar a instalação da recovery via Odin, você pode desconectar o celular, e no meu caso, eu removi a bateria para desligar.<br />f) É Interessante ir até o Passo 8, Baixar o Gapps e já deixar prontinho no Cartão SD nesse momento, para que seja mais fácil usar depois.<br /><br /><a rel="noreferrer noopener" href="https://www.cyanogenmods.org/forums/topic/install-twrp-recovery-samsung-android-using-odin/" target="_blank">https://www.cyanogenmods.org/forums/topic/install-twrp-recovery-samsung-android-using-odin/</a><br /></p>



<p class="has-background has-very-light-gray-background-color"><strong>Passo 5. Acessar a recovery TWRP</strong><br />Com o celular desligado, pressione <strong>Volume Up + Home + Power</strong></p>



<p class="has-text-color has-background has-very-light-gray-color has-cyan-bluish-gray-background-color"><strong>Passo 5. (Opcional mas MUITO IMPORTANTE) Faça um backup do sistema.</strong><br />É o chamado NANDROID Backup. Que nada mais é do que o backup completo da NAND Flash Storage, o armazenamento interno do seu telefone. O TWRP tem opção para fazer isso. Aconselho fazer o backup e salvar no cartão SD, e depois salvar no computador. Faça compactado, demora mais mas economiza espaço.<br /><a rel="noreferrer noopener" href="https://www.cyanogenmods.org/forums/topic/take-nandroid-backup-twrp-recovery/" target="_blank">https://www.cyanogenmods.org/forums/topic/take-nandroid-backup-twrp-recovery/</a></p>



<p class="has-background has-very-light-gray-background-color"><strong>Passo 6. Faça o Wipe da data partition, Cache partition, e system partition.</strong><br />Pode seguir os passos conforme o post abaixo. Pode ignorar a parte do NANDROID Backup, caso já tenha feito acima. Ok?<br /><a rel="noreferrer noopener" href="https://www.cyanogenmods.org/forums/topic/clean-wipe-data-partitions-using-twrp/" target="_blank">https://www.cyanogenmods.org/forums/topic/clean-wipe-data-partitions-using-twrp/</a></p>



<p class="has-text-color has-background has-very-light-gray-color has-cyan-bluish-gray-background-color">Passo 7. Instalar o adb no computador. (&nbsp;<a rel="noreferrer noopener" href="https://en.wikipedia.org/wiki/Android_Debug_Bridge" target="_blank">Android Debug Bridge</a>&nbsp;)<br />A principio é simples e rápido, tem dois links abaixo, pode escolher qualquer um deles. Recomendo o primeiro mesmo: <br /><a rel="noreferrer noopener" href="https://wiki.lineageos.org/adb_fastboot_guide.html" target="_blank"></a><a href="https://www.cyanogenmods.org/minimal-adb-and-fastboot-windows/" target="_blank" rel="noreferrer noopener">https://www.cyanogenmods.org/minimal-adb-and-fastboot-windows/</a><br />ou<br /><a href="https://wiki.lineageos.org/adb_fastboot_guide.html" target="_blank" rel="noreferrer noopener">https://wiki.lineageos.org/adb_fastboot_guide.html</a></p>



<p class="has-background has-very-light-gray-background-color"><strong>Passo 8. Baixar o LineageOS e o GAPPS</strong> (Google Apps)<br /><br /><strong>LineageOS:</strong><br />Link abaixo com a versão específica para o J7 (SM-J700M)<br />Baixar o arquivo mais recente (por exemplo: lineage-17.1-20200702-nightly-j7elte-signed.zip)<br /><a rel="noreferrer noopener" href="https://download.lineageos.org/j7elte" target="_blank">https://download.lineageos.org/j7elte</a><br /><br /><strong>GAPPS</strong><br />O pacote Gapps inclui as funcionalidades do Google no Android, como a Play Store por exemplo. Dependendo do pacote escolhido, vem com mais ou menos aplicativos por padrão. Gosto da opção Pico, que vem com o mínimo necessário para funcionar a Play Store. A partir daí eu instalo depois, o que eu quiser, gmail, youtube, etc&#8230; Dessa forma, só instalo o que eu realmente precisar.<br /><br />Sugiro baixar e colocar no cartão SD. De forma a instalar usando o cartão SD através do TWRP.<br /><br />Na página de download, selecione <strong>ARM, Android 10, Pico</strong><br /><br />Link para download: <a rel="noreferrer noopener" href="https://opengapps.org/" target="_blank">https://opengapps.org/</a></p>



<p class="has-text-color has-background has-very-light-gray-color has-cyan-bluish-gray-background-color"><strong>Passo 8. Instalar o LineageOS via ADB Sideload.</strong><br />Resumindo, o ADB sideload é uma opção para você instalar arquivos no android a partir do computador. No TWRP você tem opção para habilitar essa funcionalidade.<br />Abaixo o link com o passo a passo. Utilize a versão que você baixou <br /><br />IMPORTANTE:<br />&#8211; Após instalar não reinicie o sistema. Apenas volte para a pagina inicial do TWRP.<br /><br /><a rel="noreferrer noopener" href="https://www.cyanogenmods.org/adb-sideload-twrp/" target="_blank">https://www.cyanogenmods.org/adb-sideload-twrp/</a></p>



<p class="has-background has-very-light-gray-background-color"><strong>Passo 9. Instalar GAPPS</strong><br />Para instalar o Gapps usando a TWRP recovery, siga as instruções do link seguir.<br /><br /><a rel="noreferrer noopener" href="https://www.cyanogenmods.org/forums/topic/flashinstall-google-apps-gapps-using-twrp-recovery/" target="_blank">https://www.cyanogenmods.org/forums/topic/flashinstall-google-apps-gapps-using-twrp-recovery/</a></p>



<p class="has-text-color has-background has-very-light-gray-color has-vivid-green-cyan-background-color">Completando esses passos todos, é só dar reboot e iniciar o celular normalmente e aproveitar o Android 10!</p>



<p>Pra mim, a experiência foi sensacional.</p>



<p>Não tenho muito conhecimento nesses processos todos, só estou compartilhando a experiência que tive com meu aparelho, então receio que talvez não possa ajudar muito caso você tenha algum aparelho de outro modelo diferente do meu. Nesse caso, tem bastante material pela internet, dá uma pesquisada!</p>



<p>Grande abraço!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/instalacao-lineageos-17-1-com-android-10-no-galaxy-j7/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Encontro INF21 &#8211; 15/09/2018</title>
		<link>https://genilto.com/encontro-inf21-15-09-2018/</link>
					<comments>https://genilto.com/encontro-inf21-15-09-2018/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Fri, 12 Apr 2019 21:50:09 +0000</pubDate>
				<category><![CDATA[Drones]]></category>
		<category><![CDATA[inf21]]></category>
		<category><![CDATA[mavic pro]]></category>
		<category><![CDATA[turma]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1954</guid>

					<description><![CDATA[Fala galeeera! Este é o vídeo que montei do encontro do pessoal que estudou comigo na Faculdade. Carinhosamente chamamos o grupo de INF21, que era o código da turma, acho ...]]></description>
										<content:encoded><![CDATA[
<p>Fala galeeera!</p>



<p>Este é o vídeo que montei do encontro do pessoal que estudou comigo na Faculdade.</p>



<p>Carinhosamente chamamos o grupo de INF21, que era o código da turma, acho que do primeiro semestre ainda, rsrsrs</p>



<p>Foi um churrasco no Bela Vista Country &amp; Club em Gaxxxpar / SC.</p>



<p>Foi todo gravado com um Mavic PRO, meio mal configurado, podemos notar nos granulados das imagens, mas mesmo assim, valeu o vídeo rsrsrs</p>



<p>Reparem nos murmúrio da galera no início do vídeo haha</p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" width="800" height="450" src="https://www.youtube.com/embed/eahX6I7TTvc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>Grande abraço pra essa galera aí!!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/encontro-inf21-15-09-2018/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>O Contraste</title>
		<link>https://genilto.com/o-contraste/</link>
					<comments>https://genilto.com/o-contraste/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Tue, 09 Apr 2019 01:14:28 +0000</pubDate>
				<category><![CDATA[Drones]]></category>
		<category><![CDATA[Pensamentos]]></category>
		<category><![CDATA[azul]]></category>
		<category><![CDATA[campo]]></category>
		<category><![CDATA[contraste]]></category>
		<category><![CDATA[drone]]></category>
		<category><![CDATA[mato]]></category>
		<category><![CDATA[praia]]></category>
		<category><![CDATA[verde]]></category>
		<category><![CDATA[viagem]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1949</guid>

					<description><![CDATA[Fala galera!! Este foi um momento um pouco filosófico. O Contraste foi de uma percepção minha dos diferentes gostos, diferentes ambientes, diferentes climas, cada qual com seus pontos positivos e ...]]></description>
										<content:encoded><![CDATA[
<p>Fala galera!!</p>



<p>Este foi um momento um pouco filosófico. O Contraste foi de uma percepção minha dos diferentes gostos, diferentes ambientes, diferentes climas, cada qual com seus pontos positivos e negativos.</p>



<p>Praia e campo são muito diferentes na minha opinião, e não é concorrência, mas acho que apenas um contraste de duas coisas que se complementam.</p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" width="800" height="450" src="https://www.youtube.com/embed/stiibDOAQ5g?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>Grande abraço!!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/o-contraste/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Minha compra na LightInTheBox! Seguro Alfandegário funciona? Pocophone F1 tá na mão!!</title>
		<link>https://genilto.com/minha-compra-na-lightinthebox-seguro-alfandegario-funciona-pocophone-f1-ta-na-mao/</link>
					<comments>https://genilto.com/minha-compra-na-lightinthebox-seguro-alfandegario-funciona-pocophone-f1-ta-na-mao/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Tue, 09 Oct 2018 14:27:40 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Importações]]></category>
		<category><![CDATA[china]]></category>
		<category><![CDATA[lightinthebox]]></category>
		<category><![CDATA[pocophone]]></category>
		<category><![CDATA[seguro alfandegario]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1862</guid>

					<description><![CDATA[Fala galera, tudo certo? Voltando aqui para contar pra vocês sobre minha compra na Lightinthebox. Pra quem não sabe, é uma loja chinesa, não tão conhecida como outras do tipo ...]]></description>
										<content:encoded><![CDATA[<p>Fala galera, tudo certo?</p>
<p>Voltando aqui para contar pra vocês sobre minha compra na <a href="http://lightinthebox.com" target="_blank" rel="noopener">Lightinthebox</a>. Pra quem não sabe, é uma loja chinesa, não tão conhecida como outras do tipo <a href="https://www.banggood.com/" target="_blank" rel="noopener">banggood</a> e <a href="https://www.gearbest.com/" target="_blank" rel="noopener">gearbest</a>, mas que também tem grande participação nas vendas de produtos chineses para nós aqui no Brasil.</p>
<p>Vou ser sincero e dizer que só comprei lá, pois no momento que fiz a compra, eles estavam oferecendo o tal do Seguro Alfandegário, e de forma gratuita ainda por cima.</p>
<p>Nem pestanejei e já resolvi testar isso aí. Estava mesmo querendo muito comprar um celular novo, e estava de olho nos top da Xiaomi, como por exemplo o Mi 8 (top de linha) e também o Mi A2 (com android one), que são muuito interessantes.</p>
<p>Quando vi e li sobre o Pocophone, fiquei impressionado e optei por ele (e não me arrependi, até agora!).</p>
<p>Muito bem. Fiz um vídeo, que mostra rapidamente a compra, e depois explico um pouco do que aconteceu e então faço o unboxing do produto. Confira abaixo:</p>
<p><iframe loading="lazy" width="800" height="450" src="https://www.youtube.com/embed/lgp4XqyyR4Y?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe></p>
<h3></h3>
<h3>Resumindo:</h3>
<ul>
<li><strong>30/08/2018 &#8211; </strong>Fiz a compra
<ul>
<li>Me pediram confirmação do cartão de crédito utilizado através de um ticket no próprio site.</li>
</ul>
</li>
<li><strong>04/09/2018 &#8211; </strong>Me enviaram</li>
<li><strong>19/09/2018</strong> &#8211; Apareceu detalhes de rastreamento nos Correios</li>
<li><strong> 27/09/2018</strong> &#8211; Fiscalização aduaneira Finalizada. Necessário pagar a taxa.
<ul>
<li>Preço declarado do produto: <strong>R$ 1501,97</strong> * <strong>60%</strong> (imposto alfandegário) = <strong>R$ 901,18</strong>
<ul>
<li>Mais a mordida dos correios: <strong>R$ 15,00</strong></li>
</ul>
</li>
<li>Valor final a pagar: <strong>R$ 916,18. </strong>Percebam que o imposto foi calculado corretamente pela receita.</li>
<li>Antes de pagar entrei em contato com a Lightinthebox, enviando o DIT (Demonstrativo de imposto) perguntando se caso eu pagasse eles me reembolsariam:
<ul>
<li><strong>Resposta deles:</strong> &#8220;<em>Nós queremos reembolsar para você 100% dos Impostos e Taxas, uma vez que você adquiriu o Seguro para Impostos e Taxas para este pedido.. Por favor, nos informe os valores das Taxas e Impostos e faça o upload da imagem do comprovante de pagamento destas taxas no seu próximo email. Ficaremos felizes em reembolsar este valor assim que recebermos a cópia do comprovante. </em>&#8220;</li>
</ul>
</li>
</ul>
</li>
<li><strong>29/09/2018</strong> &#8211; Fiz o pagamento das taxas e enviei o comprovante através do ticket no site.</li>
<li><strong>01/10/2018</strong> &#8211; Responderam o ticket me dando duas opções:
<ul>
<li>&#8220;<em>Como você tem seguro de impostos gratuitos no Brasil, nós forneceremos 2 soluções:</em><br />
<em>1. Nós oferecemos-lhe recompensas no valor de BRL R$ 1099.42 (taxa de imposto de 120%)</em><br />
<em>2. Nós Podemos reembolsar para você BRL R$ 916.18 (100% as taxas e impostos alfandegários).</em><br />
<em>Por favor escolha uma das opções acima apresentadas.</em>&#8220;</li>
<li>Respondi que preferia os 100% de reembolso mesmo.</li>
</ul>
</li>
<li><strong>02/10/2018 &#8211;</strong> Resposta deles: &#8220;<em>Nós iremos reembolsar para você [ 916.18 BRL] (100% dos Impostos e Taxas) uma vez que você adquiriu o Seguro para Impostos e Taxas para este pedido.</em><br />
<em>O reembolso vai ser enviado à sua conta de recompensas e créditos. Normalmente o processo de reembolso demora de 1-2 dias úteis para se completar&#8221;</em></p>
<ul>
<li>Já no mesmo dia estava o valor disponível na minha conta de recompensas e créditos. Imediatamente solicitei a retirada que seria creditada no meu cartão de crédito, já que a compra foi realizada por meio dele.</li>
</ul>
</li>
<li><strong>04/10/2018</strong> &#8211; Objeto entregue ao destinatário!</li>
<li><span style="color: #008000;"><strong>06/10/2018</strong> &#8211; Crédito recebido no cartão de crédito referente ao reembolso do imposto.</span></li>
</ul>
<p>E é isso aí, o Pocophone F1 é um excelente smartphone!</p>
<p>É uma pena que essa opção de seguro alfandegário não está mais disponível. Mas fiquemos de olho, de vez em quando eles abrem isso novamente.</p>
<p>Grande abraço, espero ter tirado algumas dúvidas de quem por ventura deseja comprar na lightinthebox.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/minha-compra-na-lightinthebox-seguro-alfandegario-funciona-pocophone-f1-ta-na-mao/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Saira Militar &#8211; Benedito Novo</title>
		<link>https://genilto.com/saira-militar-benedito-novo/</link>
					<comments>https://genilto.com/saira-militar-benedito-novo/#comments</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Mon, 06 Aug 2018 15:40:43 +0000</pubDate>
				<category><![CDATA[Animais e Pets]]></category>
		<category><![CDATA[benedito novo]]></category>
		<category><![CDATA[saira-militar]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1852</guid>

					<description><![CDATA[Bonitinho né? Popularmente conhecido como Saíra-militar (Tangara cyanocephala), em Benedito Novo. Se deliciando com uma maçã. Também conhecida por Green-headed tanager (Em inglês). Existem &#8220;variações&#8221; como a Red-necked tanager, essa ...]]></description>
										<content:encoded><![CDATA[<p>Bonitinho né? Popularmente conhecido como Saíra-militar (Tangara cyanocephala), em Benedito Novo. Se deliciando com uma maçã.</p>
<p>Também conhecida por Green-headed tanager (Em inglês).<br />
Existem &#8220;variações&#8221; como a Red-necked tanager, essa estou tentando filmar ainda.<br />
Fica para um próximo vídeo.</p>
<p><iframe loading="lazy" width="800" height="450" src="https://www.youtube.com/embed/ET-BX19NshY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p>
<p>Grande abraço!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/saira-militar-benedito-novo/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como importar bateria Mavic Pro direto da China pelo Banggood</title>
		<link>https://genilto.com/como-importar-bateria-mavic-pro-direto-da-china-pelo-banggood/</link>
					<comments>https://genilto.com/como-importar-bateria-mavic-pro-direto-da-china-pelo-banggood/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Wed, 21 Feb 2018 03:56:12 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Importações]]></category>
		<category><![CDATA[banggood]]></category>
		<category><![CDATA[importar]]></category>
		<category><![CDATA[intelligent flight battery]]></category>
		<category><![CDATA[mavic pro]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1845</guid>

					<description><![CDATA[Olá galera! Faz já um tempo que não tenho postado nada por aqui. Dessa vez estou fazendo um post para ajudar quem está tentando comprar baterias para seu drone Mavic ...]]></description>
										<content:encoded><![CDATA[<p>Olá galera!</p>
<p>Faz já um tempo que não tenho postado nada por aqui. Dessa vez estou fazendo um post para ajudar quem está tentando comprar baterias para seu drone Mavic Pro.</p>
<p><img loading="lazy" decoding="async" class="alignleft size-full wp-image-1847" src="https://genilto.com/wp-content/uploads/sites/2/2018/02/mavic-battery-1.jpeg" alt="" width="275" height="183" /></p>
<p>Fiquei um tempo pesquisando e, realmente no Brasil, essa bateria inteligente está com um preço bem salgado!</p>
<p>O que sempre fiquei de olho foi para importar essa bateria, da china mesmo, uma vez que os preços por lá são muito menores, geralmente, 50% do valor daqui&#8230;</p>
<p>O problema é que desde 2016 existe uma lei proibindo o transporte de baterias de íon lítio como carga em aeronaves de passageiros em todo o território nacional, conforme informou a Anac. (Veja mais detalhes aqui: <a href="http://www.valor.com.br/empresas/4506354/anac-proibe-transporte-de-baterias-de-ion-litio-como-carga-em-avioes" target="_blank" rel="noopener">http://www.valor.com.br/empresas/4506354/anac-proibe-transporte-de-baterias-de-ion-litio-como-carga-em-avioes</a>).</p>
<p>Por isso, é extremamente difícil importar esse tipo de bateria.</p>
<p>Porém&#8230; Não sei de que forma, ainda existem lojas que conseguem enviar esses produtos. O problema, é que, por exemplo no aliexpress, você consegue comprar essa bateria e receber no Brasil, pagando um frete de quase $60,00 dólares. Fica inviável. Melhor comprar aqui.</p>
<p>A dica de hoje, é ficar de olho em lojas como a banggood, uma loja extremamente confiável da China. Digo isso pois comprei várias coisas de lá e sempre chegaram direitinho, mesmo as vezes demorando um tempo considerável.</p>
<p>Atualmente, e não sei por quando tempo vai durar, ela está vendendo baterias do mavic pro por um preço muito bom (hoje 20/02/2018 está em torno de R$ 320,00 com frete e seguro).</p>
<p>Inclusive, aconselho que marque sempre o envio com seguro. Mesmo pagando uma pequena taxa a mais. Isso garante que, se por ventura seu produto não chegar, eles irão reenviar pra você!</p>
<p>Enfim, o link direto para compra da bateria está aí: <a href="http://bit.ly/2olkRjF" target="_blank" rel="noopener">http://bit.ly/2olkRjF</a></p>
<p>E ainda, se usar o cupom lucky8, ganha mais um descontinho&#8230;</p>
<p>E antes que pergunte, sim, a bateria é original mesmo.</p>
<p><img loading="lazy" decoding="async" class="size-medium wp-image-1846 alignnone" src="https://genilto.com/wp-content/uploads/sites/2/2018/02/Bateria-para-DJI-DJI-Mavic-pro-V-o-Inteligente-Mavic-Quadcopter-Zang-o-com-c-mera.jpg_640x640-300x300.jpg" alt="" width="300" height="300" srcset="https://genilto.com/wp-content/uploads/sites/2/2018/02/Bateria-para-DJI-DJI-Mavic-pro-V-o-Inteligente-Mavic-Quadcopter-Zang-o-com-c-mera.jpg_640x640-300x300.jpg 300w, https://genilto.com/wp-content/uploads/sites/2/2018/02/Bateria-para-DJI-DJI-Mavic-pro-V-o-Inteligente-Mavic-Quadcopter-Zang-o-com-c-mera.jpg_640x640-150x150.jpg 150w, https://genilto.com/wp-content/uploads/sites/2/2018/02/Bateria-para-DJI-DJI-Mavic-pro-V-o-Inteligente-Mavic-Quadcopter-Zang-o-com-c-mera.jpg_640x640-88x88.jpg 88w, https://genilto.com/wp-content/uploads/sites/2/2018/02/Bateria-para-DJI-DJI-Mavic-pro-V-o-Inteligente-Mavic-Quadcopter-Zang-o-com-c-mera.jpg_640x640.jpg 640w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Eu já comprei a minha, e já estou pensando em comprar mais&#8230;</p>
<p>Grande abraço e até mais!!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/como-importar-bateria-mavic-pro-direto-da-china-pelo-banggood/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Curso Oracle Personalization</title>
		<link>https://genilto.com/curso-oracle-personalization/</link>
					<comments>https://genilto.com/curso-oracle-personalization/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Sun, 07 Aug 2016 22:55:12 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle EBS]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[ebs]]></category>
		<category><![CDATA[oportunidade]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[personalization]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1793</guid>

					<description><![CDATA[Olá galera!!! Essa é para quem quer aprender tudo sobre Oracle EBS Personalization!!! Nosso amigo Eduardo Schurtz resolveu reabrir as inscrições para uma segunda turma do curso!!! Começa amanhã!! E ...]]></description>
										<content:encoded><![CDATA[<p>Olá galera!!!<br />
Essa é para quem quer aprender tudo sobre Oracle EBS Personalization!!!</p>
<p>Nosso amigo <a class="profileLink" href="https://www.facebook.com/eduardo.schurtz" data-hovercard="/ajax/hovercard/user.php?id=100000376150652">Eduardo Schurtz</a> resolveu reabrir as inscrições para uma segunda turma do curso!!! Começa amanhã!!</p>
<div class="text_exposed_show">
<p>E tem mais, quem se inscrever ainda amanhã, segunda-feira (08/08/16), tem um desconto especial de 10%!! Só amanhã até as 23:59:59, presta atenção!</p>
<p>Corre galera! Eu não perderia de jeito nenhum!</p>
<p>Tanto não perderia, que eu mesmo fiz esse curso na primeira turma. Confesso que já trabalho a anos com EBS e utilizo muito esse recurso, mas aprendi muitos detalhes incríveis que poderiam ter me ajudado bastante em algumas customizações que fiz!</p>
<p>&#8220;O único curso para profissionais Oracle EBS que mostra, na prática, como dominar personalizações forms e web, para que você não dependa de mais ninguém e não perca mais tempo pesquisando, mesmo que seu conhecimento técnico seja mínimo ou zero.&#8221;</p>
<p>Conquiste mais um diferencial para se destacar no mercado.</p>
<p>Quem quiser mais detalhes só entrar em contato comigo que irei ajudar no que puder!!</p>
<p>Para se inscrever basta clicar no link abaixo e se inscrever!</p>
<p><a href="http://hotmart.net.br/show.html?a=N4693363W" target="_blank">http://hotmart.net.br/show.html?a=N4693363W</a></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/curso-oracle-personalization/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Curso de Personalização, em português? Isso existe!!</title>
		<link>https://genilto.com/curso-de-personalizacao-em-portugues-isso-existe/</link>
					<comments>https://genilto.com/curso-de-personalizacao-em-portugues-isso-existe/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Fri, 03 Jun 2016 13:20:36 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle EBS]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[interessados]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[oracle EBS]]></category>
		<category><![CDATA[personalização]]></category>
		<category><![CDATA[português]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1789</guid>

					<description><![CDATA[Essa é para meus amigos do EBS, ou, para os que tem interesse em começar com Oracle EBS. Está para ser lançado um curso de personalização totalmente novo, para isso ...]]></description>
										<content:encoded><![CDATA[<p>Essa é para meus amigos do EBS, ou, para os que tem interesse em começar com Oracle EBS.</p>
<p>Está para ser lançado um curso de personalização totalmente novo, para isso foi criada uma lista de interessados no curso.</p>
<p>Quem estiver na lista, além de receber novidades sobre o curso, terá prioridade no momento do lançamento do curso!</p>
<p>Por isso, se você tem interesse em aprender mais sobre personalizações no Oracle EBS, não pode perder essa chance!!!</p>
<p>Quer saber mais sobre Personalization?</p>
<p>Primeiro, leia isso:<br />
<a href="http://eduardoschurtz.com/oracle/2015/12/oracle-form-personalization/" target="_blank">http://eduardoschurtz.com/…/2015/12/oracle-form-personaliz…/</a><br />
E isso:<br />
<a href="http://eduardoschurtz.com/oracle/2016/05/oracle-ebs-personalization/" target="_blank">http://eduardoschurtz.com/oracle/2016/05/oracle-ebs-persona…/</a></p>
<p>Segundo: Agradeçam ao meu amigo <a href="http://eduardoschurtz.com/oracle">Eduardo Schurtz</a> por essa!</p>
<p>E por último, demonstre interesse pelo curso, aqui:</p>
<p><a href="http://eduardoschurtz.com/oracle/interessados-curso-ebs-personalization/?goal=0_9b932d6c6d-77d53fa8cf-148886341" target="_blank">http://eduardoschurtz.com/oracle/interessados-curso-ebs-personalization/?goal=0_9b932d6c6d-77d53fa8cf-148886341</a></p>
<p>Fácil, não é mesmo?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/curso-de-personalizacao-em-portugues-isso-existe/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Make the future on the way</title>
		<link>https://genilto.com/make-the-future-on-the-way/</link>
					<comments>https://genilto.com/make-the-future-on-the-way/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Sun, 17 Jan 2016 20:08:00 +0000</pubDate>
				<category><![CDATA[Pensamentos]]></category>
		<category><![CDATA[batatas]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[futuro]]></category>
		<category><![CDATA[guitarra]]></category>
		<category><![CDATA[livro]]></category>
		<category><![CDATA[Música]]></category>
		<category><![CDATA[pensamentos]]></category>
		<category><![CDATA[planejamento]]></category>
		<category><![CDATA[poesia]]></category>
		<category><![CDATA[viagem]]></category>
		<category><![CDATA[vida]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1752</guid>

					<description><![CDATA[Olá, Faz um tempo que não posto nada no blog. Dizem que o tempo é curto em meio a tantas responsabilidades que temos no dia a dia. De certa forma ...]]></description>
										<content:encoded><![CDATA[<p>Olá,</p>
<p>Faz um tempo que não posto nada no blog.<br />
Dizem que o tempo é curto em meio a tantas responsabilidades que temos no dia a dia.</p>
<p>De certa forma eu concordo com isso.</p>
<p>De certa forma, não.</p>
<p>A verdade é que não sabemos quanto tempo realmente temos.</p>
<p>Levantamos, corremos ao trabalho, almoçamos, jantamos, vemos televisão, olhamos o facebook, rimos com uma tirinha no whats up do grupo, mais duas ou três coisas, e vamos dormir. Então tudo recomeça.</p>
<p>Nem lembro qual foi a última música que aprendi na guitarra.</p>
<p>Talvez precise tirar um tempo para isso. Aprender uma música nova de vez em quando.<br />
Ou estudar uma tecnologia nova, gosto bastante disso (e sim, sou profissional de informática).</p>
<p>Eu consigo tirar um tempo pra isso.</p>
<p><img loading="lazy" decoding="async" class="wp-image-1779 size-thumbnail alignright" src="https://genilto.com/wp-content/uploads/sites/2/2016/01/relogio-150x150.png" alt="relogio" width="150" height="150" srcset="https://genilto.com/wp-content/uploads/sites/2/2016/01/relogio-150x150.png 150w, https://genilto.com/wp-content/uploads/sites/2/2016/01/relogio-88x88.png 88w" sizes="auto, (max-width: 150px) 100vw, 150px" />Descubro então, somos nós quem gerenciamos o tempo, afinal. Somos nós os donos do tempo! Não acha?<br />
Exceto quando decidimos dormir só mais 5 minutinhos, com o despertador desligado.</p>
<p>Bem, tomamos as nossas próprias decisões. E receberemos um retorno delas, algum dia.</p>
<p>Pode ser que leve apenas breves minutos. Ou longos anos.</p>
<p>O fato é, ele virá.</p>
<h5>As batatas do tempo</h5>
<p><img loading="lazy" decoding="async" class="alignleft size-full wp-image-1772" src="https://genilto.com/wp-content/uploads/sites/2/2016/01/batata.jpg" alt="batata" width="194" height="204" />Sabemos que se plantarmos batatas e cuidarmos delas direitinho, as chances de termos batatas para colher são muito maiores do que se não fizéssemos nada.</p>
<p>Mas de que droga estou falando afinal? Bem, não estou perdido em marte pra saber que sem batatas eu não sobrevivo.</p>
<p>Bem, é por isso que vamos ao trabalho todos os dias.</p>
<p>Então podemos ler mais uma tirinha no facebook, e esperar as batatas crescerem. É isso o que fazemos.</p>
<p>É uma analogia esdrúxula, eu sei mas, se plantarmos somente batatas, só teremos batatas na próxima colheita.</p>
<p>E lá, na próxima colheita, nem lembraremos o que fizemos nesse meio tempo. E eu que gosto tanto de batatas com molho de tomates. Por que não plantamos tomates também?</p>
<p>Ah certo, lembrei! Aquela tirinha era tão engraçada não é? Era sobre o que mesmo?</p>
<h5>Um livro sobre batatas!</h5>
<p><img loading="lazy" decoding="async" class="alignright size-full wp-image-1773" src="https://genilto.com/wp-content/uploads/sites/2/2016/01/livro-batatas.jpg" alt="livro-batatas" width="200" height="200" srcset="https://genilto.com/wp-content/uploads/sites/2/2016/01/livro-batatas.jpg 200w, https://genilto.com/wp-content/uploads/sites/2/2016/01/livro-batatas-150x150.jpg 150w, https://genilto.com/wp-content/uploads/sites/2/2016/01/livro-batatas-88x88.jpg 88w" sizes="auto, (max-width: 200px) 100vw, 200px" />Eu gosto de ouvir e compor músicas boas. Ouvir eu consigo, compor nem tanto. Mas eu gosto.</p>
<p>Descobri agora que gosto de escrever também. Não preciso fazer rimas, e nem pensar em uma melodia. O que não torna a atividade mais fácil, porém.</p>
<p>Talvez um dia eu escreva um livro. Ainda não sei quando, mas eu tenho vontade. Vou fazer aos poucos. Posso escrever todo dia, uma linha, um parágrafo, o que for.</p>
<p>Daqui a pouco só irá faltar o título. Acredito  que será o mais difícil. Algo que faça tanto sentido e, que represente de forma precisa, todo o conteúdo.</p>
<p>Pensando assim, quanta coisa eu posso ser, e posso fazer, não é?</p>
<h5>Uma galinha de papo cheio</h5>
<p><img loading="lazy" decoding="async" class="alignleft size-medium wp-image-1774" src="https://genilto.com/wp-content/uploads/sites/2/2016/01/galinha-265x300.jpg" alt="galinha" width="265" height="300" srcset="https://genilto.com/wp-content/uploads/sites/2/2016/01/galinha-265x300.jpg 265w, https://genilto.com/wp-content/uploads/sites/2/2016/01/galinha-300x340.jpg 300w, https://genilto.com/wp-content/uploads/sites/2/2016/01/galinha.jpg 500w" sizes="auto, (max-width: 265px) 100vw, 265px" />São tantas coisas que queremos todos os dias. As coisas pequenas são boas, podemos conseguir de imediato.</p>
<p>Compramos um celular novo, estamos contentes. Podemos ver o facebook mais vezes ao dia!</p>
<p>Se eu economizar R$ 100,00 todo mês vou levar um ano, só pra comprar um celular.</p>
<p>Compro e vivo o agora. Pago a prestação. Nunca vou conseguir aquele milhão de reais economizando, não é mesmo?</p>
<p>Se não plantar batatas, não vai colher batatas.</p>
<p>Bem isso já sabemos. O que não sabemos é  quanto tempo ainda temos.</p>
<p>Vários anos pela frente eu suponho. Vinte, trinta, cinquenta anos.</p>
<p>Se for jovem, e tiver mais uns cinquenta anos pela frente, por que não pensar para pelo menos vinte? Já fez as contas? Mais o juros compostos? E se não for só cem reais?</p>
<p>Talvez cada real a mais todo mês, em vinte anos pode dar uma boa diferença. Sem fazer você deixar de ser feliz durante esse tempo. Apenas pense sobre isso.</p>
<p>Mais uma coisa, você acha mesmo que precisa de um milhão?</p>
<h5>Too much things we wish</h5>
<p><img loading="lazy" decoding="async" class="alignright size-full wp-image-1775" src="https://genilto.com/wp-content/uploads/sites/2/2016/01/genio_lampada.jpg" alt="genio_lampada" width="191" height="273" />Bem, voltando para aquele assunto, depois de escrever o parágrafo diário do meu livro, posso dar uma olhada em como tocar a música que ouvi hoje, muito boa!</p>
<p>Quero tocar ela com minha banda. Sim quero ter uma banda também. Para tocar as músicas que estou compondo.</p>
<p>Depois gravar, eu mesmo, com minha placa de som no meu computador. Posso aprender a gravar, mixar e masterizar!</p>
<p>Depois disponibilizo na internet para o mundo. Talvez até com um vídeo clip! Legal não é?</p>
<p>Tudo pode ser um hobby. Me mantém vivo. Disposto. Com objetivos.</p>
<p>Gosto disso. É bom a gente gostar do que faz. Eu gosto muito do que eu faço. E olha que eu trabalho com informática.</p>
<p>Vamos lá então. Um pouco por dia. Pensar e trabalhar em algo que nos faz crescer! Quem sabe não criamos algo novo nesse mundo tão igual?</p>
<p>No máximo não vai dar certo.</p>
<p>Tem batata que não vinga. Mas aí percebemos que esquecemos de regar. E fazemos de novo. Do jeito certo. Pronto.</p>
<h5><strong>Um belo purê de batatas</strong></h5>
<p><img loading="lazy" decoding="async" class="alignleft size-full wp-image-1776" src="https://genilto.com/wp-content/uploads/sites/2/2016/01/pure_com_tomate.jpg" alt="pure_com_tomate" width="236" height="199" />Tanta coisa para fazer e eu falando em fazer mais e mais. Só posso estar louco.</p>
<p>Somos donos do tempo. Esqueceu?</p>
<p>Loucos estamos quando deixamos de fazer o que vale a pena, o que realmente gostamos e queremos fazer, o que realmente vai fazer sermos melhor amanhã.</p>
<p>Enquanto temos objetivos na vida, nos mantemos firmes. Sonhos são importantes, quando podemos trabalhar neles.</p>
<p>Sonhos de verdade nos fazem ser melhores amanhã.</p>
<p>Para sermos melhores amanhã, precisamos amar. Sermos amados.</p>
<p>E chegamos, enfim, ao assunto. Família.</p>
<p>Chegamos no ponto chave. Esse texto começou por um motivo. E não foi por que gosto de batatas.</p>
<p>Investimento em felicidade de verdade. Isso sim é importante. Não sei você, mas família é tudo pra mim. É o que faz valer a pena.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-1777 size-full" src="https://genilto.com/wp-content/uploads/sites/2/2016/01/familia1.jpg" alt="familia1" width="554" height="369" srcset="https://genilto.com/wp-content/uploads/sites/2/2016/01/familia1.jpg 554w, https://genilto.com/wp-content/uploads/sites/2/2016/01/familia1-300x200.jpg 300w" sizes="auto, (max-width: 554px) 100vw, 554px" /></p>
<p>Para concluir, falando desse assunto, sobre investimentos, batatas, planejamento pessoal e tudo mais, eu queria fazer uma pequena observação, inclua sua família. Falo por mim, por vezes parecemos esquecê-la ou, parecemos não nos importar. Mesmo sabendo da importância que tem para nós.</p>
<p>Quer investir de verdade? Invista em felicidade, mas já sendo feliz. Essa é a dica de hoje. Sem mais.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/make-the-future-on-the-way/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Java RMI &#8211; Modelo Acadêmico de CHAT RMI</title>
		<link>https://genilto.com/java-rmi-modelo-academico-de-chat-rmi/</link>
					<comments>https://genilto.com/java-rmi-modelo-academico-de-chat-rmi/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Wed, 21 Oct 2015 14:00:49 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[bate papo]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[cliente]]></category>
		<category><![CDATA[rmi]]></category>
		<category><![CDATA[serializado]]></category>
		<category><![CDATA[servidor]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1672</guid>

					<description><![CDATA[Fala galera. Depois de muito, muito tempo, me perguntaram sobre meu projeto do Chat RMI. Fiz ele na época da faculdade. Nem sabia se ainda funcionava ou não, então resolvi ...]]></description>
										<content:encoded><![CDATA[<p>Fala galera.</p>
<p>Depois de muito, muito tempo, me perguntaram sobre meu projeto do Chat RMI. Fiz ele na época da faculdade.</p>
<p>Nem sabia se ainda funcionava ou não, então resolvi testá-lo novamente. E acreditem, ainda funciona.</p>
<p><a href="https://genilto.com/wp-content/uploads/sites/2/2015/10/cliente_servidor_rmi.jpg"><img loading="lazy" decoding="async" class="aligncenter wp-image-1673 size-large" src="https://genilto.com/wp-content/uploads/sites/2/2015/10/cliente_servidor_rmi-1024x555.jpg" alt="cliente_servidor_rmi" width="616" height="334" srcset="https://genilto.com/wp-content/uploads/sites/2/2015/10/cliente_servidor_rmi-1024x555.jpg 1024w, https://genilto.com/wp-content/uploads/sites/2/2015/10/cliente_servidor_rmi-300x163.jpg 300w, https://genilto.com/wp-content/uploads/sites/2/2015/10/cliente_servidor_rmi-768x416.jpg 768w, https://genilto.com/wp-content/uploads/sites/2/2015/10/cliente_servidor_rmi-816x443.jpg 816w, https://genilto.com/wp-content/uploads/sites/2/2015/10/cliente_servidor_rmi.jpg 1182w" sizes="auto, (max-width: 616px) 100vw, 616px" /></a></p>
<p>O que fiz foi fazer o download do projeto daqui: <a href="http://sourceforge.net/projects/chatrmi" target="_blank">http://sourceforge.net/projects/chatrmi</a></p>
<p>Abri o projeto no Netbeans, ajustei algumas referências que estavam faltando, fiz o Build, e pronto. É só rodar!!</p>
<p>O código fonte está todo lá! Pra quem quiser.</p>
<p>Grande abraço galera!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/java-rmi-modelo-academico-de-chat-rmi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>EBS &#8211; Liberando Retenções &#8211; API do Oracle (OE_HOLDS_PUB.Release_Holds)</title>
		<link>https://genilto.com/ebs-liberando-retencoes-api-do-oracle-oe_holds_pub-release_holds/</link>
					<comments>https://genilto.com/ebs-liberando-retencoes-api-do-oracle-oe_holds_pub-release_holds/#comments</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Wed, 09 Sep 2015 21:22:04 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle EBS]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[automacao]]></category>
		<category><![CDATA[codigo fonte]]></category>
		<category><![CDATA[OM]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[order management]]></category>
		<category><![CDATA[retenções]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1660</guid>

					<description><![CDATA[Fala galera! Esse é mais um dos meus clássicos posts sobre APIs do Oracle. Chamei de clássicos pois não é o primeiro, hahá! Acho que é o segundo sobre APIs. ...]]></description>
										<content:encoded><![CDATA[<p>Fala galera!</p>
<p>Esse é mais um dos meus clássicos posts sobre APIs do Oracle. Chamei de clássicos pois não é o primeiro, hahá! Acho que é o segundo sobre APIs. Um clássico.</p>
<p>Enfim, hoje vamos ver uma API que já utilizei em muitos lugares onde trabalhei, pois sempre existe a necessidade de aplicar e/ou remover alguma retenção em alguns pedidos, de forma automática e através de customização.</p>
<p>Neste post vou abordar <strong>apenas como remover a retenção</strong>, usando a API abaixo:</p>
<pre class="brush: sql; title: ; notranslate">
-- Faz a chamada da API para liberação das retenções
OE_HOLDS_PUB.Release_Holds(p_api_version       =&gt; 1.0
                         , p_init_msg_list     =&gt; FND_API.G_TRUE
                         , p_commit            =&gt; FND_API.G_FALSE
                         , p_validation_level  =&gt; FND_API.G_VALID_LEVEL_NONE
                         , p_hold_source_rec   =&gt; r_hold_source_rec
                         , p_hold_release_rec  =&gt; r_hold_release_rec
                         , x_return_status     =&gt; w_return_status
                         , x_msg_count         =&gt; w_msg_count
                         , x_msg_data          =&gt; w_msg_data);
</pre>
<p>A Api é bem simples de usar. Para ficar ainda mais fácil, criei um script pronto para rodar, bastando apenas informar qual é o pedido. O programa irá buscar todas as retenções que o pedido possui e irá liberar uma por uma. </p>
<p>No exemplo, foi necessário setar o contexto para que funcione corretamente ao rodar fora do ambiente do EBS, inclusive tendo que setar, além da organização, também a responsabilidade e usuário logado. Conforme abaixo:</p>
<pre class="brush: sql; title: ; notranslate">
fnd_global.apps_initialize(15992, 50663, 660);
mo_global.set_policy_context(p_access_mode =&gt; 'S', p_org_id =&gt; 81);
</pre>
<p>Porém quando rodando dentro do EBS, não precisa nada disso acima.</p>
<p>Segue abaixo o código fonte do exemplo:</p>
<pre class="brush: sql; title: ; notranslate">
DECLARE
  
  w_return_status VARCHAR2(1);
  w_message_error VARCHAR2(4000);

  -------------------------------------------------------------------
  -- Gera um log no concorrente 
  -------------------------------------------------------------------
  PROCEDURE gera_log(p_log IN VARCHAR2) IS
  BEGIN
    --Fnd_File.Put_Line(Fnd_File.Output, to_char(SYSDATE, 'DD/MM/RRRR HH24:MI:SS')||': '||p_log);
    dbms_output.put_line(to_char(SYSDATE, 'DD/MM/RRRR HH24:MI:SS')||': '||p_log);
  END gera_log;

  -------------------------------------------------------------------
  -- Libera todas as retenções de uma Ordem, caso a ordem possua
  -- origem como SALDO OP
  -------------------------------------------------------------------
  PROCEDURE Libera_Retencoes_Pedido(p_header_id      IN NUMBER
                                  , x_return_status OUT VARCHAR2
                                  , x_message_error OUT VARCHAR2) IS
    
    -- Busca informações do pedido
    CURSOR c_header IS
    SELECT oeoh.order_number
         , oeos.name order_source_name
      FROM oe_order_headers_all oeoh
         , oe_order_sources     oeos
     WHERE oeoh.order_source_id = oeos.order_source_id
       AND oeoh.header_id       = p_header_id;
    
    -- Busca todas as retenções do pedido
    CURSOR c_holds IS
    SELECT hd.hold_id
         , hs.hold_entity_code
         , oh.header_id
         , hs.hold_source_id
         , hd.name hold_name
      FROM oe_order_holds_all  oh
         , oe_hold_sources_all hs
         , oe_hold_definitions hd
     WHERE oh.hold_source_id = hs.hold_source_id
       AND hs.hold_id        = hd.hold_id
       AND oh.released_flag  = 'N'
       AND oh.line_id        IS NULL
       AND oh.header_id      = p_header_id;
    
    r_header            c_header%ROWTYPE;
    r_hold_source_rec   OE_HOLDS_PVT.HOLD_SOURCE_REC_TYPE;
    r_hold_release_rec  OE_HOLDS_PVT.HOLD_RELEASE_REC_TYPE;
    w_count             NUMBER;
    
    w_return_status     VARCHAR2(1);
    w_msg_count         NUMBER;
    w_msg_data          VARCHAR2(32767);
    w_index             BINARY_INTEGER;
    
    E_ERROR             EXCEPTION;
    
  BEGIN
    
    x_return_status := 'S';
    x_message_error := NULL;
  
    -- Busca informações do pedido
    OPEN c_header;
    FETCH c_header INTO r_header;
    CLOSE c_header;
    
    -- Verifica se o pedido foi encontrado
    IF r_header.order_number IS NULL THEN
      x_return_status := 'E';
      x_message_error := 'Pedido com #ID '||p_header_id||' não foi encontrado';
      RETURN;
    END IF;
  
    -- Verifica se o pedido é elegível para o processo
    IF r_header.order_source_name != 'SALDO OP' THEN
      x_return_status := 'E';
      x_message_error := 'Pedido deve possuir origem &quot;SALDO OP&quot;. O pedido informado ('||r_header.order_number||') possui origem &quot;'||r_header.order_source_name||'&quot;';
      RETURN;
    END IF;
    
    gera_log(RPAD('-', 100, '-'));
    gera_log('Iniciando processo de liberação de retenções para o pedido '||r_header.order_number);
    gera_log(RPAD('-', 100, '-'));
    
    w_count := 0;
    -- Percorre todas as retenções do pedido e libera todas elas
    FOR r_hold IN c_holds LOOP

      w_count := w_count + 1;
      
      BEGIN
        
        r_hold_source_rec := NULL;
        r_hold_source_rec.hold_id              := r_hold.hold_id;
        r_hold_source_rec.hold_entity_code     := r_hold.hold_entity_code;
        r_hold_source_rec.hold_entity_id       := r_hold.header_id;
        --
        r_hold_release_rec := NULL;
        r_hold_release_rec.hold_source_id      := r_hold.hold_source_id;
        r_hold_release_rec.release_reason_code := 'VALID_CONFIG'; -- FIXO
        r_hold_release_rec.release_comment     := 'Liberado pois SALDO OP não deve ter retenções aplicadas';
        
        gera_log('Liberando Retenção &quot;'||r_hold.hold_name||'&quot;');
        
        OE_MSG_PUB.Initialize ();
        
        -- Faz a chamada da API para liberação das retenções
        OE_HOLDS_PUB.Release_Holds(p_api_version       =&gt; 1.0
                                 , p_init_msg_list     =&gt; FND_API.G_TRUE
                                 , p_commit            =&gt; FND_API.G_FALSE
                                 , p_validation_level  =&gt; FND_API.G_VALID_LEVEL_NONE
                                 , p_hold_source_rec   =&gt; r_hold_source_rec
                                 , p_hold_release_rec  =&gt; r_hold_release_rec
                                 , x_return_status     =&gt; w_return_status
                                 , x_msg_count         =&gt; w_msg_count
                                 , x_msg_data          =&gt; w_msg_data);

        -- Verifica se a retencao foi liberada
        IF w_return_status = FND_API.G_RET_STS_SUCCESS THEN
          gera_log('  -&gt; Retenção &quot;'||r_hold.hold_name||'&quot; liberada com sucesso');
        ELSE
          
          x_return_status := 'E';
          x_message_error := 'Erro ao liberar retenção &quot;'||r_hold.hold_name||'&quot; do Pedido &quot;'||r_header.order_number||'&quot;. Erro ('||w_msg_count||'): ';
          
          gera_log('  -&gt; '||x_message_error);
          
          -- Busca mensagens de erro
          IF w_msg_count &gt; 0 THEN
            FOR w_index IN 1..w_msg_count LOOP
              w_msg_data := OE_MSG_PUB.get(p_msg_index =&gt; w_index
                                         , p_encoded   =&gt; 'F');
              
              gera_log('  -&gt; '||w_index||' - '||w_msg_data);
              
              -- Valida para nao estourar o campo
              IF Length(x_message_error||w_msg_data) &lt;= 4000 THEN
                x_message_error := x_message_error || w_msg_data;
              END IF;

            END LOOP;
          END IF;
          
          RAISE E_ERROR;
        END IF;
        
      EXCEPTION
        WHEN E_ERROR THEN
          RAISE E_ERROR;
        WHEN OTHERS THEN
          x_return_status := 'E';
          x_message_error := 'Erro ao liberar retenção &quot;'||r_hold.hold_name||'&quot; do Pedido &quot;'||r_header.order_number||'&quot;. Erro: '||SQLERRM;
          gera_log(x_message_error);
          RAISE E_ERROR;
      END;
    
    END LOOP;
    
    gera_log(RPAD('-', 100, '-'));
    IF w_count &gt; 0 THEN
      COMMIT;
      gera_log('Liberadas '||w_count||' retenções para o pedido &quot;'||r_header.order_number||'&quot;');
    ELSE
      gera_log('Nenhuma retenção encontrada para o pedido &quot;'||r_header.order_number||'&quot;');
    END IF;
    
  EXCEPTION
    WHEN E_ERROR THEN
      ROLLBACK;
    WHEN OTHERS THEN
      x_return_status := 'E';
      x_message_error := 'Erro ao liberar retenções do Pedido com #ID '||p_header_id||'. Erro: '||SQLERRM;
  END Libera_Retencoes_Pedido;
  
BEGIN
  
  -- IMPORTANTE APENAS QUANDO RODANDO FORA DO EBS
  fnd_global.apps_initialize(15992, 50663, 660);
  mo_global.set_policy_context(p_access_mode =&gt; 'S', p_org_id =&gt; 81);
  --
 
  -- Libera todas as retenções do pedido
  Libera_Retencoes_Pedido(p_header_id     =&gt; 2748543 -- HEADER_ID do Pedido
                        , x_return_status =&gt; w_return_status
                        , x_message_error =&gt; w_message_error);
  
  IF w_return_status != 'S' THEN
    gera_log(RPAD('-', 100, '-'));
    gera_log('FINALIZADO COM ERRO: '||w_message_error);
  END IF;
  
END;
</pre>
<p>Se foi útil, ou se você apenas gostou, peço que compartilhe com seus contatos, poderá ser muito útil para eles.<br />
Qualquer dúvida comenta aqui no blog.</p>
<p>Grande Abraço</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/ebs-liberando-retencoes-api-do-oracle-oe_holds_pub-release_holds/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>EBS &#8211; Cálculo de Impostos &#8211; API do Oracle (zx_api_pub.calculate_tax)</title>
		<link>https://genilto.com/ebs-calculo-de-impostos-api-do-oracle-zx_api_pub-calculate_tax/</link>
					<comments>https://genilto.com/ebs-calculo-de-impostos-api-do-oracle-zx_api_pub-calculate_tax/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Tue, 25 Aug 2015 21:30:44 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle EBS]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[impostos]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[order management]]></category>
		<category><![CDATA[zx_api_pub.calculate_tax]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1641</guid>

					<description><![CDATA[Fala Galera, Hoje vou fazer um post mais rápido porém muito, muito útil. Existem casos em que precisamos fazer, e saber antecipadamente, em alguma customização, quais serão os impostos que ...]]></description>
										<content:encoded><![CDATA[<p>Fala Galera,</p>
<p>Hoje vou fazer um post mais rápido porém muito, muito útil.</p>
<p>Existem casos em que precisamos fazer, e saber antecipadamente, em alguma customização, quais serão os impostos que serão aplicados em algum determinado item que será vendido.</p>
<p>Vi essa questão resolvida de duas maneiras.</p>
<p><strong>A primeira maneira de chegar nos impostos</strong>, é desenvolvendo uma solução customizada para cálculo de impostos. Sim, na minha opinião isso é loucura. Simplesmente não dá pra considerar todas as regras e exceções desses cálculos de uma maneira prática e rápida.</p>
<p>Inclusive, eu já vi essa solução em funcionamento. E sim, não funcionava direito. Sempre faltava considerar alguma regra, seja de regras de Uso e Consumo, seja se Cesta Básica, ou qualquer outra regra de imposto que não atendia a regra básica.</p>
<p>ICMS por exemplo. Algo que tivesse alguma alíquota fora da padrão de Estado Origem e Destino, já trazia a alíquota errada. E por mais que tentássemos cercar, sempre faltava alguma coisa.</p>
<p>Desta forma procurei outras maneiras de resolver esse problema. Foi então que caiu a fixa. Atualmente, o EBS atende, senão todas (não sei), mas a grande maioria das regras de impostos, pois a nota fiscal tem que sair corretamente, certo?</p>
<p>A partir daí cheguei na <strong>Segunda Maneira de Calcular os Impostos</strong>, de forma customizada, que no caso, foi apenas utilizar a roda que já foi inventada, ou seja, utilizar uma API nativa do Oracle, que já faz esse cálculo, e considere todas as regras configuradas pelo Fiscal.</p>
<p>A API que utilizei, encontrei dentro da tela de Ordens de Venda (OEXOEORD). Esta tela calcula uma prévia dos impostos quando fazemos o registro da mesma. Para ver, basta consultar uma ordem previamente registrada, navegar até uma das linhas, e ir no botão Ações e depois em Verificar detalhes do imposto.</p>
<p>Será exibida uma tela com as informações dos impostos.</p>
<p><a href="https://genilto.com/wp-content/uploads/sites/2/2015/08/calculo_impostos.jpg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1642" src="https://genilto.com/wp-content/uploads/sites/2/2015/08/calculo_impostos.jpg" alt="calculo_impostos" width="575" height="291" srcset="https://genilto.com/wp-content/uploads/sites/2/2015/08/calculo_impostos.jpg 575w, https://genilto.com/wp-content/uploads/sites/2/2015/08/calculo_impostos-300x152.jpg 300w" sizes="auto, (max-width: 575px) 100vw, 575px" /></a></p>
<p>Dessa forma, abrindo a tela, encontrei a API:</p>
<pre class="brush: sql; title: ; notranslate">
zx_api_pub.calculate_tax
</pre>
<p>Esta é a API responsável pelo cálculo dos impostos da Ordem de Venda e, provavelmente, seja ela também que faça os cálculos para a Nota Fiscal.</p>
<p>Dessa forma encontrei todos os dados e parâmetros necessários e montei uma procedure que recebe alguns parâmetros obrigatórios e faz a complexa chamada da API de cálculo de impostos.</p>
<p>Para testar, é necessário alterar as informações que estão sendo passadas nos parâmetros, conforme as informações da sua empresa em questão e demais informações, como item, vendedor, endereços, e demais informações.</p>
<pre class="brush: sql; title: ; notranslate">
-- Chama a rotina para carregar informações do imposto
  Calculate_Tax(p_org_id             =&gt; 81
              , p_order_type_id      =&gt; 1370
              , p_sold_to_org_id     =&gt; 3592570
              , p_organization_id    =&gt; 115
              , p_inventory_item_id  =&gt; 11734850
              , p_ship_from_org_id   =&gt; 115
              , p_ship_to_org_id     =&gt; 112975
              , p_invoice_to_org_id  =&gt; 112974
              , p_ordered_quantity   =&gt; 5000
              , p_unit_selling_price =&gt; 4.26
              , p_fob_point_code     =&gt; 'CIF'
              , p_salesrep_id        =&gt; 100011117
              , px_return_status     =&gt; w_return_status
              , px_message_error     =&gt; w_message_error);
</pre>
<p>No exemplo, foi necessário setar o contexto para que funcione corretamente ao rodar fora do ambiente do EBS, conforme abaixo:</p>
<pre class="brush: sql; title: ; notranslate">MO_GLOBAL.SET_POLICY_CONTEXT(p_access_mode  =&gt; 'S', p_org_id =&gt; 81);</pre>
<p>O que essa rotina faz é carregar uma tabela temporária(zx_detail_tax_lines_gt), então, depois de rodar o bloco PL/SQL, é possível visualizar as informações do imposto a partir da Query abaixo:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT a.tax_id
     , a.tax
     , a.tax_rate_code
     , a.tax_rate
     , a.unit_price
     , a.trx_line_quantity
     , a.line_amt
     , a.taxable_amt
     , a.tax_amt
     , a.tax_amt_included_flag
     , a.tax_regime_id
     , a.tax_regime_code
     , a.tax_status_id
     , a.tax_status_code
     , a.tax_rate_id
     , a.legal_justification_text1
     , a.legal_justification_text2
     , a.legal_justification_text3
  FROM zx_detail_tax_lines_gt a
     , zx_rates_b             b
 WHERE a.tax_rate_id = b.tax_rate_id
--   AND a.tax LIKE '%C' -- Trazer apenas o que for Crédito
 ORDER BY a.tax_line_number;
</pre>
<p>O Resultado será assim:</p>
<p><a href="https://genilto.com/wp-content/uploads/sites/2/2015/08/exemplo_calculo_impostos_ebs.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-1652" src="https://genilto.com/wp-content/uploads/sites/2/2015/08/exemplo_calculo_impostos_ebs-300x213.png" alt="exemplo_calculo_impostos_ebs" width="600" height="427" srcset="https://genilto.com/wp-content/uploads/sites/2/2015/08/exemplo_calculo_impostos_ebs-300x213.png 300w, https://genilto.com/wp-content/uploads/sites/2/2015/08/exemplo_calculo_impostos_ebs-768x546.png 768w, https://genilto.com/wp-content/uploads/sites/2/2015/08/exemplo_calculo_impostos_ebs-816x580.png 816w, https://genilto.com/wp-content/uploads/sites/2/2015/08/exemplo_calculo_impostos_ebs.png 1017w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></p>
<p>O código completo está abaixo, já possível testá-lo, porém antes é necessário configurar os parâmetros, conforme comentei acima.</p>
<p>Se foi útil, ou se você apenas gostou, peço que compartilhe com seus contatos, poderá ser muito útil para eles.</p>
<pre class="brush: sql; title: ; notranslate">
DECLARE

  C_ERROR   CONSTANT VARCHAR2(1) := 'E';
  C_SUCCESS CONSTANT VARCHAR2(1) := 'S';
  
  w_return_status VARCHAR2(1);
  w_message_error VARCHAR2(4000);
  
  PROCEDURE l (t IN VARCHAR2) IS
  BEGIN
    dbms_output.put_line (t);
  END l;
  
  --------------------------------------------------------------------------
  FUNCTION Get_le_id(p_order_type_id NUMBER
                   , p_sold_to_customer_id NUMBER
                   , p_bill_to_customer_id NUMBER
                   , p_org_id NUMBER
                   , px_message_error OUT VARCHAR2) RETURN NUMBER IS

    l_invoice_source_id  NUMBER;
    l_invoice_source     VARCHAR2(50);
    l_order_type_rec     OE_ORDER_CACHE.ORDER_TYPE_REC_TYPE;
    l_customer_type      VARCHAR2(30);
    l_customer_id        NUMBER;
    l_cust_trx_type_id   NUMBER;
    l_return_status      VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
    l_legal_entity_id    NUMBER;
    l_msg_data           VARCHAR2(1000);
    
  BEGIN

    IF p_sold_to_customer_id IS NOT NULL THEN
      l_customer_type := 'SOLD_TO';
      l_customer_id := p_sold_to_customer_id;
    ELSIF p_bill_to_customer_id IS NOT NULL THEN
      l_customer_type := 'BILL_TO';
      l_customer_id := p_bill_to_customer_id;
    END IF;

    l_order_type_rec    := OE_ORDER_CACHE.Load_Order_Type(p_order_type_id);
    l_invoice_source_id := l_order_type_rec.invoice_source_id;
    l_cust_trx_type_id  := l_order_type_rec.cust_trx_type_id;

    IF l_invoice_source_id IS NULL THEN
      l_invoice_source := oe_sys_parameters.value('INVOICE_SOURCE', p_org_id);

      IF (l_invoice_source IS NOT NULL) THEN
        SELECT batch_source_id
          INTO l_invoice_source_id
          FROM ra_batch_sources
         WHERE name = l_invoice_source;
      
      END IF;
    END IF;

    IF l_cust_trx_type_id IS NULL THEN
      l_cust_trx_type_id := oe_sys_parameters.value('OE_INVOICE_TRANSACTION_TYPE_ID',p_org_id);
    END IF;

    l_legal_entity_id := XLE_BUSINESSINFO_GRP.Get_OrdertoCash_Info (
                               x_return_status       =&gt; l_return_status,    -- OUT
                               x_msg_data            =&gt; l_msg_data,         -- OUT
                               p_customer_type       =&gt; l_customer_type,    -- IN  P_customer_type
                               p_customer_id         =&gt; l_customer_id,      -- IN  P_customer_id (sold_to/bill_to customer_id)
                               p_transaction_type_id =&gt; l_cust_trx_type_id, -- IN  P_transaction_type_id
                               p_batch_source_id     =&gt; l_invoice_source_id,-- IN  P_batch_source_id
                               p_operating_unit_id   =&gt; p_org_id            -- IN  P_operating_unit_id (org_id)
                               );

    IF l_return_status &lt;&gt; FND_API.G_RET_STS_SUCCESS OR l_legal_entity_id = -1 THEN

      IF l_msg_data IS NOT NULL THEN
        px_message_error := 'Erro: '||l_msg_data;
      ELSE
        px_message_error := 'Erro na chamada de XLE_BUSINESSINFO_GRP.Get_OrdertoCash_Info';
      END IF;
      
      RETURN -1;
    END IF;

    RETURN l_legal_entity_id;
  EXCEPTION
    WHEN OTHERS THEN
      px_message_error := 'Erro: '||SQLERRM;
      RETURN -1;
  END Get_le_id;
  
  --------------------------------------------------------------------------
  PROCEDURE Calculate_Tax(p_org_id             IN oe_order_headers_all.org_id%TYPE
                        , p_order_type_id      IN oe_order_headers_all.order_type_id%TYPE
                        , p_sold_to_org_id     IN oe_order_headers_all.sold_to_org_id%TYPE
                        , p_organization_id    IN mtl_system_items_b.organization_id%TYPE
                        , p_inventory_item_id  IN oe_order_lines_all.inventory_item_id%TYPE
                        , p_ship_from_org_id   IN oe_order_lines_all.ship_from_org_id%TYPE
                        , p_ship_to_org_id     IN oe_order_lines_all.ship_to_org_id%TYPE
                        , p_invoice_to_org_id  IN oe_order_lines_all.invoice_to_org_id%TYPE
                        , p_ordered_quantity   IN oe_order_lines_all.ordered_quantity%TYPE
                        , p_unit_selling_price IN oe_order_lines_all.unit_selling_price%TYPE
                        , p_fob_point_code     IN oe_order_lines_all.fob_point_code%TYPE
                        , p_salesrep_id        IN oe_order_lines_all.salesrep_id%TYPE
                        , px_return_status    OUT VARCHAR2
                        , px_message_error    OUT VARCHAR2) AS
  
    -- Busca informações básicas do Item
    CURSOR c_item IS
    SELECT a.organization_id
         , a.inventory_item_id
         , a.primary_uom_code
         , a.description
         , a.segment1
         , a.global_attribute2 trx_business_category
      FROM mtl_system_items_vl a
     WHERE a.inventory_item_id = p_inventory_item_id
       AND a.organization_id = p_organization_id;
    
    -- Busca informações fiscais do Tipo de Transação
    CURSOR c_order_type IS
    SELECT otta.transaction_type_id order_type_id
         , ottt.name
         , NVL(otta.cust_trx_type_id, 0) cust_trx_type_id
         , rct.global_attribute4        tax_code
         , otta.currency_code            currency_code
      FROM oe_transaction_types_all otta
         , oe_transaction_types_tl  ottt
         , ra_cust_trx_types_all    rct
     WHERE otta.transaction_type_id = ottt.transaction_type_id
       AND ottt.language = USERENV('LANG')
       AND otta.cust_trx_type_id = rct.cust_trx_type_id (+)
       AND otta.org_id           = rct.org_id           (+)
       AND otta.transaction_type_id = p_order_type_id;
    
    -- Busca a moeda
    CURSOR c_currency(p_currency_code IN fnd_currencies.currency_code%TYPE) IS
    SELECT c.currency_code
         , c.minimum_accountable_unit
         , c.precision
      FROM fnd_currencies c
     WHERE c.currency_code = p_currency_code;

    -- Busca informações do cliente e entrega
    CURSOR getlocinfo(p_site_org_id hz_cust_site_uses_all.site_use_id%TYPE) IS
    SELECT /* MOAC_SQL_CHANGE */ 
           s_ship.site_use_id
         , s_ship.cust_acct_site_id
         , acct_site_ship.cust_account_id
         , party.party_id
         , party_site_ship.party_site_id
         , loc_ship.location_id
      FROM hz_cust_site_uses      s_ship 
         , hz_cust_acct_sites_all acct_site_ship
         , hz_party_sites         party_site_ship
         , hz_locations           loc_ship
         , hz_parties             party
         , hz_cust_accounts_all   cust_acct
     WHERE s_ship.site_use_id       = p_site_org_id
       AND s_ship.cust_acct_site_id = acct_site_ship.cust_acct_site_id
       AND acct_site_ship.cust_account_id = cust_acct.cust_account_id
       AND cust_acct.party_id = party.party_id
       AND acct_site_ship.party_site_id = party_site_ship.party_site_id
       AND party_site_ship.location_id  = loc_ship.location_id;
    
    -- Busca o local da organização
    CURSOR get_internal_loc(p_organization_id number) IS
    SELECT location_id
      FROM hr_organization_units
     WHERE organization_id = p_organization_id;
    
    r_item         c_item%ROWTYPE;
    r_order_type   c_order_type%ROWTYPE;
    r_currency     c_currency%ROWTYPE;
    r_ship_locinfo getlocinfo%ROWTYPE;
    r_bill_locinfo getlocinfo%ROWTYPE;
    --
    l_return_status                VARCHAR2(1);
    l_msg_count                    NUMBER;
    l_msg_data                     VARCHAR2(2000);
    l_product_fisc_classification  VARCHAR2(240);
    l_trx_line_number              NUMBER;
    i                              NUMBER;
    l_internal_org_location_id     NUMBER;
    l_header_id                    oe_order_headers.header_id%type;
    l_tax_date                     oe_order_lines.tax_date%type;
    l_ship_from_location_id        NUMBER;
    l_application_id               NUMBER;
    l_entity_code_crsr             zx_detail_tax_lines_gt.entity_code%TYPE;
    l_event_class_code_crsr        zx_detail_tax_lines_gt.event_class_code%TYPE ;
    l_trx_level_type_crsr          zx_detail_tax_lines_gt.trx_level_type%TYPE;
    l_line_id                      NUMBER;
    l_inventory_org_id             NUMBER;
    l_order_number                 oe_order_headers_all.order_number%TYPE;
    l_ar_sys_param_rec             ar_system_parameters_all%ROWTYPE;
    l_legal_entity_id              NUMBER(15);
    l_bill_from_location_id        NUMBER;
    --
    l_transaction_rec       zx_api_pub.transaction_rec_type;
    l_doc_level_recalc_flag VARCHAR2(30);
    l_poo_party_id          NUMBER;
    l_poo_location_id       NUMBER;
    
    exit_excp EXCEPTION;
    
    PROCEDURE Add(p_field IN OUT VARCHAR2
                , p_text IN VARCHAR2) IS
    BEGIN
      IF p_text IS NULL THEN
        RETURN;
      END IF;
      
      IF p_field IS NULL THEN
        p_field := p_text;
      ELSE
        p_field := p_field || ' - ' || p_text;
      END IF;
    END Add;
  
  BEGIN
    
    -- O cálculo deverá ser feito exatamente como a Ordem de Venda Faz
    -- Por esse motivo esta sendo passado o mesmo evento como sendo a partir da Ordem
    px_return_status        := C_SUCCESS;
    l_entity_code_crsr      := 'OE_ORDER_HEADERS';
    l_event_class_code_crsr := 'SALES_TRANSACTION_TAX_QUOTE';
    l_trx_level_type_crsr   := 'LINE';
    
    -- Como Não temos Ordem de Venda por se tratar de uma simulação, passamos zero para os IDs
    l_header_id             := 0;
    l_order_number          := 0;
    l_line_id               := 0;
    l_trx_line_number       := 0;
    -- 
    l_tax_date              := SYSDATE;
    l_application_id        := 660;
    --
    l_inventory_org_id := oe_sys_parameters.value('MASTER_ORGANIZATION_ID', p_org_id);
    
    -- Busca informações básicas do Item
    r_item := NULL;
    OPEN c_item;
    FETCH c_item INTO r_item;
    CLOSE c_item;
    
    -- Verifica se encontrou o item
    IF r_item.organization_id IS NULL THEN
      px_return_status := C_ERROR;
      px_message_error := 'Item com ID '||p_inventory_item_id
                       || ' não encontrado na Organização com ID '||p_organization_id;
      RETURN;
    END IF;
    
    --l('trx business:'||r_item.trx_business_category);
    
    -- Busca a classificação fiscal do Item
    BEGIN
      SELECT category_concat_segs
        INTO l_product_fisc_classification
        FROM mtl_item_categories_v a
       WHERE a.inventory_item_id = p_inventory_item_id
         AND a.organization_id   = p_organization_id
         AND a.category_set_name = 'FISCAL_CLASSIFICATION'
         AND a.enabled_flag      = 'Y'
         AND rownum = 1;
    EXCEPTION
      WHEN no_Data_Found THEN
        px_return_status := C_ERROR;
        px_message_error := 'Classificação fiscal (FISCAL_CLASSIFICATION) não encontrada para o Item '||r_item.segment1
                       || ' da Organização com ID '||p_organization_id;
        RETURN;
      WHEN OTHERS THEN
        px_return_status := C_ERROR;
        px_message_error := 'Erro ao buscar Classificação fiscal (FISCAL_CLASSIFICATION) para o Item '||r_item.segment1
                       || ' da Organização com ID '||p_organization_id||'. Erro: '||SQLERRM;
        RETURN;
    END;
    
    --l('l_product_fisc_classification: '||l_product_fisc_classification);
        
    -- Busca informações do AR
    l_AR_Sys_Param_Rec := OE_Sys_Parameters_Pvt.Get_AR_Sys_Params;
    
    -- Busca informações
    r_order_type := NULL;
    OPEN c_order_type;
    FETCH c_order_type INTO r_order_type;
    CLOSE c_order_type;
    
    -- Verifica se encontrou o tipo de transação
    IF r_order_type.order_type_id IS NULL THEN
      px_return_status := C_ERROR;
      px_message_error := 'Tipo de transação com ID '||p_order_type_id
                       || ' não encontrado.';
      RETURN;
    END IF;
    
    --l('Customer trx type id is:'||r_order_type.cust_trx_type_id);
    --l('l_tax_code is:'||r_order_type.tax_code);
    --l('l_currency_code: '||r_order_type.currency_code);
    
    -- Verifica se encontrou tipo de transação do AR associado com o Tipo de Ordem
    -- Caso não encontre o tipo de transação no tipo de ordem do OM
    IF r_order_type.cust_trx_type_id = 0 THEN
      SELECT NVL(oe_sys_parameters.value('OE_INVOICE_TRANSACTION_TYPE_ID', p_org_id), 0) --moac
        INTO r_order_type.cust_trx_type_id
        FROM DUAL;
        --l(  'CUSTOMER TRANSACTION TYPE ID FROM PROFILE : '||r_order_type.cust_trx_type_id);
    END IF;
     
    --code changes made for bug 1883552  end
    --l('Customer trx type id is:'||r_order_type.cust_trx_type_id);
    
    -- Busca informações da Moeda
    r_currency := NULL;
    OPEN c_currency(r_order_type.currency_code);
    FETCH c_currency INTO r_currency;
    CLOSE c_currency;
    
    -- Verifica se encontrou informações da Moeda
    IF r_currency.currency_code IS NULL THEN
      l('Moeda '||r_order_type.currency_code||' não encontrada');
    END IF;
    
    r_ship_locinfo := NULL;
    IF p_ship_to_org_id IS NOT NULL THEN
      
      OPEN getlocinfo(p_ship_to_org_id);
      FETCH getlocinfo INTO r_ship_locinfo;
      CLOSE getlocinfo;
      
      -- Verifica se encontrou informações de entrega
      IF r_ship_locinfo.site_use_id IS NULL THEN
        l('Não encontrada informações para ship_to_org_id: '||p_ship_to_org_id);
      END IF;
      
    END IF;

    r_bill_locinfo := NULL;
    IF p_invoice_to_org_id IS NOT NULL THEN
    
      OPEN getlocinfo(p_invoice_to_org_id);
      FETCH getlocinfo INTO r_bill_locinfo;
      CLOSE getlocinfo;
      
      -- Verifica se encontrou informações de entrega
      IF r_bill_locinfo.site_use_id IS NULL THEN
        l('Não encontrada informações para invoice_to_org_id: '||p_invoice_to_org_id);
      END IF;
    END IF;
    
    -- Busca informações da Organização
    OPEN get_internal_loc(p_org_id);
    FETCH get_internal_loc INTO l_internal_org_location_id;
    CLOSE get_internal_loc;

    -- bug 4622791
    IF p_ship_from_org_id IS NOT NULL THEN
      BEGIN
        SELECT location_id
          INTO l_ship_from_location_id
          FROM hr_all_organization_units hu
         WHERE hu.organization_id = p_ship_from_org_id;
      EXCEPTION
        WHEN OTHERS THEN
          px_return_status := C_ERROR;
          px_message_error := 'Organização ID '||p_ship_from_org_id||' não encontrado em hr_all_organization_units.';
          RETURN;
      END;
    ELSE
      px_return_status := C_ERROR;
      px_message_error := 'Organização Depósito deve ser informada.';
      RETURN;
    END IF;

    --l('l_ship_from_location_id: '||l_ship_from_location_id);

    -- bug 5061910: pass l_poo_party_id poa_party_id
    IF p_salesrep_id IS NOT NULL THEN
      
      BEGIN
        SELECT asgn.organization_id
             , hou.location_id
          INTO l_poo_party_id
             , l_poo_location_id
          FROM ra_salesreps_all sales
             , per_all_assignments_f asgn
             , hr_organization_units hou
         WHERE asgn.person_id = sales.person_id
           AND sales.salesrep_id = p_salesrep_id
           AND sales.org_id = p_org_id
           AND NVL(asgn.primary_flag, 'Y') = 'Y'
           AND hou.organization_id = asgn.organization_id
           AND l_tax_date BETWEEN NVL(asgn.effective_start_date,TO_DATE( '01011900', 'DDMMYYYY'))
           AND NVL(asgn.effective_end_date,TO_DATE( '31122199', 'DDMMYYYY'))
           AND assignment_type = 'E';
           
           --l('l_poo_party_id: '||l_poo_party_id);
           --l('l_poo_location_id: '||l_poo_location_id);
      EXCEPTION
        WHEN OTHERS THEN
          l_poo_party_id := NULL;
          l_poo_location_id := NULL;
          --l('Informações não encontradas para p_salesrep_id: '||p_salesrep_id
                            --||' e p_org_id: '||p_org_id);
      END;
    END IF;

    --bug6995051
    BEGIN
      SELECT location_id
        INTO l_bill_from_location_id
        FROM hr_all_organization_units
       WHERE organization_id = p_org_id;
    EXCEPTION
      WHEN OTHERS THEN
        l_bill_from_location_id := NULL;
    END;
    
    --l('l_bill_from_location_id: '||l_bill_from_location_id);
    --l('l_poo_party_id: '|| l_poo_party_id);

    l_legal_entity_id := get_le_id(p_order_type_id       =&gt; p_order_type_id
                                 , p_sold_to_customer_id =&gt; p_sold_to_org_id
                                 , p_bill_to_customer_id =&gt; r_bill_locinfo.cust_account_id
                                 , p_org_id              =&gt; p_org_id
                                 , px_message_error      =&gt; l_msg_data);
    
    --l('l_legal_entity_id: '||l_legal_entity_id);
    IF l_msg_data IS NOT NULL THEN
      px_return_status := C_ERROR;
      px_message_error := 'Erro ao chamar get_le_id. Erro: '||l_msg_data;
      RETURN;
    END IF;

    i := 1;
    zx_global_structures_pkg.init_trx_line_dist_tbl(i);
    zx_global_structures_pkg.trx_line_dist_tbl.APPLICATION_ID(i)   := l_application_id;
    zx_global_structures_pkg.trx_line_dist_tbl.ENTITY_CODE(i)      := l_entity_code_crsr;
    zx_global_structures_pkg.trx_line_dist_tbl.EVENT_CLASS_CODE(i) := l_event_class_code_crsr;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_ID(i)           := l_header_id;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LEVEL_TYPE(i)   := l_trx_level_type_crsr;

    zx_global_structures_pkg.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(i)          := p_org_id;--p_header_rec.org_id;
    zx_global_structures_pkg.trx_line_dist_tbl.EVENT_TYPE_CODE(i)                   := 'CREATE';
    
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_DATE(i)                          := SYSDATE;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_DOC_REVISION(i)                  := NULL; --   VARCHAR2_150_tbl_type  ,
    zx_global_structures_pkg.trx_line_dist_tbl.LEDGER_ID(i)                         := l_AR_Sys_Param_Rec.set_of_books_id;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_CURRENCY_CODE(i)                 := r_order_type.currency_code;--p_header_rec.TRANSACTIONAL_CURR_CODE;
    zx_global_structures_pkg.trx_line_dist_tbl.CURRENCY_CONVERSION_DATE(i)          := NULL;--p_header_rec.CONVERSION_RATE_DATE;
    zx_global_structures_pkg.trx_line_dist_tbl.CURRENCY_CONVERSION_RATE(i)          := NULL;--p_header_rec.CONVERSION_RATE;
    zx_global_structures_pkg.trx_line_dist_tbl.CURRENCY_CONVERSION_TYPE(i)          := NULL;--p_header_rec.CONVERSION_TYPE_CODE;
    zx_global_structures_pkg.trx_line_dist_tbl.MINIMUM_ACCOUNTABLE_UNIT(i)          := r_currency.minimum_accountable_unit;
    zx_global_structures_pkg.trx_line_dist_tbl.PRECISION(i)                         := r_currency.precision;
    -- revisit the logic to derive legal_entity_id later when legal_entity_id approach is clarified.
    zx_global_structures_pkg.trx_line_dist_tbl.LEGAL_ENTITY_ID(i)                   := l_legal_entity_id; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.ESTABLISHMENT_ID(i)                  := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_FROM_TRX_NUMBER(i)           := NULL; --   VARCHAR2_150_tbl_type  ,
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_NUMBER(i)                        := l_order_number;--p_header_Rec.order_number;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_DESCRIPTION(i)                   := NULL; --   VARCHAR2_240_tbl_type  ,
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_COMMUNICATED_DATE(i)             := NULL; --   DATE_tbl_type          ,
    zx_global_structures_pkg.trx_line_dist_tbl.BATCH_SOURCE_ID(i)                   := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.BATCH_SOURCE_NAME(i)                 := NULL; --   VARCHAR2_150_tbl_type  ,
    zx_global_structures_pkg.trx_line_dist_tbl.DOC_SEQ_ID(i)                        := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.DOC_SEQ_NAME(i)                      := NULL; --   VARCHAR2_150_tbl_type  ,
    zx_global_structures_pkg.trx_line_dist_tbl.DOC_SEQ_VALUE(i)                     := NULL; --   VARCHAR2_240_tbl_type  ,
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_DUE_DATE(i)                      := NULL; --   DATE_tbl_type          ,
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_TYPE_DESCRIPTION(i)              := NULL; --   VARCHAR2_240_tbl_type  ,
    zx_global_structures_pkg.trx_line_dist_tbl.FIRST_PTY_ORG_ID(i)                  := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.RECEIVABLES_TRX_TYPE_ID(i)           := r_order_type.cust_trx_type_id;
    zx_global_structures_pkg.trx_line_dist_tbl.TAX_EVENT_CLASS_CODE(i)              := NULL; --   VARCHAR2_30_tbl_type   ,
    zx_global_structures_pkg.trx_line_dist_tbl.TAX_EVENT_TYPE_CODE(i)               := NULL; --   VARCHAR2_30_tbl_type   ,
    zx_global_structures_pkg.trx_line_dist_tbl.DOC_EVENT_STATUS(i)                  := NULL; --   VARCHAR2_30_tbl_type   ,
    zx_global_structures_pkg.trx_line_dist_tbl.DOCUMENT_SUB_TYPE(i)                 := NULL; --   VARCHAR2_240_tbl_type  ,
    zx_global_structures_pkg.trx_line_dist_tbl.SUPPLIER_TAX_INVOICE_NUMBER(i)       := NULL; --   VARCHAR2_150_tbl_type  ,
    zx_global_structures_pkg.trx_line_dist_tbl.SUPPLIER_TAX_INVOICE_DATE(i)         := NULL; --   DATE_tbl_type          ,
    zx_global_structures_pkg.trx_line_dist_tbl.SUPPLIER_EXCHANGE_RATE(i)            := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.TAX_INVOICE_DATE(i)                  := NULL; --   DATE_tbl_type          ,
    zx_global_structures_pkg.trx_line_dist_tbl.TAX_INVOICE_NUMBER(i)                := NULL; --   VARCHAR2_150_tbl_type  ,
    zx_global_structures_pkg.trx_line_dist_tbl.QUOTE_FLAG(i)                        := 'Y'; --   VARCHAR2_1_tbl_type   ,
    zx_global_structures_pkg.trx_line_dist_tbl.DEFAULT_TAXATION_COUNTRY(i)          := NULL; --   VARCHAR2_2_tbl_type   ,
    zx_global_structures_pkg.trx_line_dist_tbl.CTRL_HDR_TX_APPL_FLAG(i)             := NULL; --   VARCHAR2_1_tbl_type    ,
    zx_global_structures_pkg.trx_line_dist_tbl.CTRL_TOTAL_HDR_TX_AMT(i)             := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.PORT_OF_ENTRY_CODE(i)                := NULL; --   VARCHAR2_30_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.TAX_REPORTING_FLAG(i)                := 'N'; --   VARCHAR2_1_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.TAX_AMT_INCLUDED_FLAG(i)             := NULL; --   VARCHAR2_1_tbl_type ,
    zx_global_structures_pkg.trx_line_dist_tbl.COMPOUNDING_TAX_FLAG(i)              := NULL; --   VARCHAR2_1_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.PROVNL_TAX_DETERMINATION_DATE(i)     := NULL; --   DATE_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.INSERT_UPDATE_FLAG(i)                := NULL; --   VARCHAR2_1_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_TO_TRX_NUMBER(i)             := NULL; --   VARCHAR2_150_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.START_EXPENSE_DATE(i)                := NULL; --   DATE_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_BATCH_ID(i)                      := NULL; --   NUMBER_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.RECORD_TYPE_CODE(i)                  := NULL; --   VARCHAR2_30_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.TAX_PROCESSING_COMPLETED_FLAG(i)     := NULL; --   VARCHAR2_1_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.APPLICATION_DOC_STATUS(i)            := NULL; --   VARCHAR2_30_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.OVERRIDING_RECOVERY_RATE(i)          := NULL; --   NUMBER_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.TAX_CALCULATION_DONE_FLAG(i)         := NULL; --   VARCHAR2_1_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.USER_UPD_DET_FACTORS_FLAG(i)         := NULL; --   VARCHAR2_1_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.ICX_SESSION_ID(i)                    := NULL; --   NUMBER_tbl_type
    -- line level columns
    --zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_CURRENCY_CODE(i)            := NULL; --   VARCHAR2_15_tbl_type   ,
    --zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_CURRENCY_CONV_DATE(i)       := NULL; --   DATE_tbl_type          ,
    --zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_CURRENCY_CONV_RATE(i)       := NULL; --   NUMBER_tbl_type        ,
    --zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_CURRENCY_CONV_TYPE(i)       := NULL; --   VARCHAR2_30_tbl_type   ,
    --zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_MAU(i)                      := NULL; --   NUMBER_tbl_type        ,
    --zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_PRECISION(i)                := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_INTENDED_USE(i)                 := NULL; --   VARCHAR2_240_tbl_type   ,
    zx_global_structures_pkg.trx_line_dist_tbl.INPUT_TAX_CLASSIFICATION_CODE(i)     := NULL; --   VARCHAR2_30_tbl_type   ,
    zx_global_structures_pkg.trx_line_dist_tbl.EXEMPTION_CONTROL_FLAG(i)            := 'S'; --l_line_rec.TAX_EXEMPT_FLAG;
    zx_global_structures_pkg.trx_line_dist_tbl.EXEMPT_REASON_CODE(i)                := NULL;--l_line_rec.TAX_EXEMPT_REASON_CODE;
    zx_global_structures_pkg.trx_line_dist_tbl.INTERFACE_ENTITY_CODE(i)             := NULL; --   VARCHAR2_30_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.INTERFACE_LINE_ID(i)                 := NULL; --   NUMBER_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.HISTORICAL_TAX_CODE_ID(i)            := NULL; --   NUMBER_tbl_type,
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_ID(i)  := l_line_id;--l_line_rec.line_id;
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_CLASS(i)          := 'INVOICE';
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_LEVEL_ACTION(i)  := 'CREATE';
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_SHIPPING_DATE(i)  := SYSDATE;--l_trx_shipping_date;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_RECEIPT_DATE(i)  := NULL ;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_TYPE(i)  := 'LINE';
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_DATE(i)  := l_tax_date;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_BUSINESS_CATEGORY(i)  := r_item.trx_business_category;
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_INTENDED_USE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.USER_DEFINED_FISC_CLASS(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_AMT_INCLUDES_TAX_FLAG(i)  := 'S';
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_AMT(i)  := p_ordered_quantity*p_unit_selling_price;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_QUANTITY(i)  := p_ordered_quantity;
    zx_global_structures_pkg.trx_line_dist_tbl.UNIT_PRICE(i)  := p_unit_selling_price;
    zx_global_structures_pkg.trx_line_dist_tbl.EXEMPT_CERTIFICATE_NUMBER(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.EXEMPT_REASON(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.CASH_DISCOUNT(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.VOLUME_DISCOUNT(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRADING_DISCOUNT(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRANSFER_CHARGE(i)  := NULL ;
    zx_global_structures_pkg.trx_line_dist_tbl.TRANSPORTATION_CHARGE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.INSURANCE_CHARGE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.OTHER_CHARGE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.PRODUCT_ID(i)  := p_inventory_item_id;
    zx_global_structures_pkg.trx_line_dist_tbl.PRODUCT_FISC_CLASSIFICATION(i):= l_product_fisc_classification;
    zx_global_structures_pkg.trx_line_dist_tbl.PRODUCT_ORG_ID(i)  := NVL(p_ship_from_org_id,l_inventory_org_id);
    zx_global_structures_pkg.trx_line_dist_tbl.UOM_CODE(i)    := r_item.primary_uom_code;
    zx_global_structures_pkg.trx_line_dist_tbl.PRODUCT_TYPE(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.PRODUCT_CODE(i)  := r_item.segment1;
    zx_global_structures_pkg.trx_line_dist_tbl.PRODUCT_CATEGORY(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_SIC_CODE(i)  := NULL ;
    zx_global_structures_pkg.trx_line_dist_tbl.FOB_POINT(i)    := NVL(p_fob_point_code, 'CIF');
    zx_global_structures_pkg.trx_line_dist_tbl.SHIP_TO_PARTY_ID(i)  := r_ship_locinfo.party_id;
    zx_global_structures_pkg.trx_line_dist_tbl.SHIP_FROM_PARTY_ID(i):= p_ship_from_org_id;
    zx_global_structures_pkg.trx_line_dist_tbl.POA_PARTY_ID(i)  := p_org_id;
    zx_global_structures_pkg.trx_line_dist_tbl.POO_PARTY_ID(i)  := l_poo_party_id;
    zx_global_structures_pkg.trx_line_dist_tbl.BILL_TO_PARTY_ID(i)  := r_bill_locinfo.party_id;
    zx_global_structures_pkg.trx_line_dist_tbl.BILL_FROM_PARTY_ID(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.MERCHANT_PARTY_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.SHIP_TO_PARTY_SITE_ID(i)  := r_ship_locinfo.party_site_id;
    zx_global_structures_pkg.trx_line_dist_tbl.SHIP_FROM_PARTY_SITE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.POA_PARTY_SITE_ID(i)  := NULL ;
    zx_global_structures_pkg.trx_line_dist_tbl.POO_PARTY_SITE_ID(i)  := NULL ;
    zx_global_structures_pkg.trx_line_dist_tbl.BILL_TO_PARTY_SITE_ID(i)  := r_bill_locinfo.party_site_id;
    zx_global_structures_pkg.trx_line_dist_tbl.BILL_FROM_PARTY_SITE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.SHIP_TO_LOCATION_ID(i)  := r_ship_locinfo.location_id;
    zx_global_structures_pkg.trx_line_dist_tbl.SHIP_FROM_LOCATION_ID(i)  := l_ship_from_location_id;
    zx_global_structures_pkg.trx_line_dist_tbl.POA_LOCATION_ID(i)    := l_internal_org_location_id;
    zx_global_structures_pkg.trx_line_dist_tbl.POO_LOCATION_ID(i)    := l_poo_location_id ;
    zx_global_structures_pkg.trx_line_dist_tbl.BILL_TO_LOCATION_ID(i)  := r_bill_locinfo.location_id;
    zx_global_structures_pkg.trx_line_dist_tbl.BILL_FROM_LOCATION_ID(i)  := l_bill_from_location_id ; --bug6995051
    zx_global_structures_pkg.trx_line_dist_tbl.ACCOUNT_CCID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ACCOUNT_STRING(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.MERCHANT_PARTY_COUNTRY(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ASSET_FLAG(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ASSET_NUMBER(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ASSET_ACCUM_DEPRECIATION(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ASSET_TYPE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ASSET_COST(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DIST_LEVEL_ACTION(i)           := NULL; --   VARCHAR2_30_tbl_type   ,
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_FROM_TAX_DIST_ID(i)    := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.ADJUSTED_DOC_TAX_DIST_ID(i)    := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.TASK_ID(i)                     := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.AWARD_ID(i)                    := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.PROJECT_ID(i)                  := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.EXPENDITURE_TYPE(i)            := NULL; --   VARCHAR2_30_tbl_type   ,
    zx_global_structures_pkg.trx_line_dist_tbl.EXPENDITURE_ORGANIZATION_ID(i) := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.EXPENDITURE_ITEM_DATE(i)       := NULL; --   DATE_tbl_type          ,
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_DIST_AMT(i)           := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_DIST_QUANTITY(i)      := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_CURR_CONV_RATE(i)      := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.ITEM_DIST_NUMBER(i)            := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_DIST_ID(i)             := NULL; --   NUMBER_tbl_type        ,
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_DIST_TAX_AMT(i)       := NULL; --   NUMBER_tbl_type        ,

    zx_global_structures_pkg.trx_line_dist_tbl.ASSESSABLE_VALUE(i)    := NULL ;
    zx_global_structures_pkg.trx_line_dist_tbl.OUTPUT_TAX_CLASSIFICATION_CODE(i)  := r_order_type.tax_code;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_ID_LEVEL2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_ID_LEVEL3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_ID_LEVEL4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_ID_LEVEL5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_ID_LEVEL6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.HDR_TRX_USER_KEY1(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.HDR_TRX_USER_KEY2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.HDR_TRX_USER_KEY3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.HDR_TRX_USER_KEY4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.HDR_TRX_USER_KEY5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.HDR_TRX_USER_KEY6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_TRX_USER_KEY1(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_TRX_USER_KEY2(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_TRX_USER_KEY3(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_TRX_USER_KEY4(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_TRX_USER_KEY5(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.LINE_TRX_USER_KEY6(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_NUMBER(i)   := l_trx_line_number;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_DIST_ID(i)   := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DIST_TRX_USER_KEY1(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DIST_TRX_USER_KEY2(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DIST_TRX_USER_KEY3(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DIST_TRX_USER_KEY4(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DIST_TRX_USER_KEY5(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DIST_TRX_USER_KEY6(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.HISTORICAL_FLAG(i)  :='N';
    zx_global_structures_pkg.trx_line_dist_tbl.CTRL_HDR_TX_APPL_FLAG(i)  :='N';
    zx_global_structures_pkg.trx_line_dist_tbl.CTRL_TOTAL_LINE_TX_AMT(i)  :=NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_DESCRIPTION(i)  := r_item.description;
    zx_global_structures_pkg.trx_line_dist_tbl.PRODUCT_DESCRIPTION(i)  := r_item.description;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_WAYBILL_NUMBER(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRX_LINE_GL_DATE(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.MERCHANT_PARTY_NAME(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.MERCHANT_PARTY_DOCUMENT_NUMBER(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.MERCHANT_PARTY_REFERENCE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.MERCHANT_PARTY_TAXPAYER_ID(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.MERCHANT_PARTY_TAX_REG_NUMBER(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.PAYING_PARTY_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.OWN_HQ_PARTY_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRADING_HQ_PARTY_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.POI_PARTY_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.POD_PARTY_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TITLE_TRANSFER_PARTY_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.PAYING_PARTY_SITE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.OWN_HQ_PARTY_SITE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRADING_HQ_PARTY_SITE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.POI_PARTY_SITE_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.POD_PARTY_SITE_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TITLE_TRANSFER_PARTY_SITE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.PAYING_LOCATION_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.OWN_HQ_LOCATION_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TRADING_HQ_LOCATION_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.POC_LOCATION_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.POI_LOCATION_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.POD_LOCATION_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.TITLE_TRANSFER_LOCATION_ID(i):= NULL;
    -- Rounding parties not required for OM. No override of rounding level
    zx_global_structures_pkg.trx_line_dist_tbl.ROUNDING_SHIP_TO_PARTY_ID(i)   := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ROUNDING_SHIP_FROM_PARTY_ID(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ROUNDING_BILL_TO_PARTY_ID(i)   := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ROUNDING_BILL_FROM_PARTY_ID(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.RNDG_SHIP_TO_PARTY_SITE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.RNDG_SHIP_FROM_PARTY_SITE_ID(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.RNDG_BILL_TO_PARTY_SITE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.RNDG_BILL_FROM_PARTY_SITE_ID(i):= NULL;

    -- Ref_doc, applied_from, applied_to, related_doc are not applicable for OM
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_APPLICATION_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_ENTITY_CODE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_EVENT_CLASS_CODE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_TRX_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_HDR_TRX_USER_KEY1(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_HDR_TRX_USER_KEY2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_HDR_TRX_USER_KEY3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_HDR_TRX_USER_KEY4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_HDR_TRX_USER_KEY5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_HDR_TRX_USER_KEY6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_LINE_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_LIN_TRX_USER_KEY1(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_LIN_TRX_USER_KEY2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_LIN_TRX_USER_KEY3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_LIN_TRX_USER_KEY4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_LIN_TRX_USER_KEY5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_LIN_TRX_USER_KEY6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_LINE_QUANTITY(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_FROM_APPLICATION_ID(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_FROM_ENTITY_CODE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_FROM_EVENT_CLASS_CODE(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_FROM_TRX_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_HDR_TRX_USER_KEY1(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_HDR_TRX_USER_KEY2(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_HDR_TRX_USER_KEY3(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_HDR_TRX_USER_KEY4(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_HDR_TRX_USER_KEY5(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_HDR_TRX_USER_KEY6(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_FROM_LINE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_LIN_TRX_USER_KEY1(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_LIN_TRX_USER_KEY2(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_LIN_TRX_USER_KEY3(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_LIN_TRX_USER_KEY4(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_LIN_TRX_USER_KEY5(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_LIN_TRX_USER_KEY6(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_FROM_DIST_ID(i)      := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_DST_TRX_USER_KEY1(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_DST_TRX_USER_KEY2(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_DST_TRX_USER_KEY3(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_DST_TRX_USER_KEY4(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_DST_TRX_USER_KEY5(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_FROM_DST_TRX_USER_KEY6(i) := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJUSTED_DOC_APPLICATION_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJUSTED_DOC_ENTITY_CODE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJUSTED_DOC_EVENT_CLASS_CODE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJUSTED_DOC_TRX_ID(i)  := NULL ;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_HDR_TRX_USER_KEY1(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_HDR_TRX_USER_KEY2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_HDR_TRX_USER_KEY3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_HDR_TRX_USER_KEY4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_HDR_TRX_USER_KEY5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_HDR_TRX_USER_KEY6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJUSTED_DOC_LINE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_LIN_TRX_USER_KEY1(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_LIN_TRX_USER_KEY2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_LIN_TRX_USER_KEY3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_LIN_TRX_USER_KEY4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_LIN_TRX_USER_KEY5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_LIN_TRX_USER_KEY6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJUSTED_DOC_DIST_ID(i)       := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_DST_TRX_USER_KEY1(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_DST_TRX_USER_KEY2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_DST_TRX_USER_KEY3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_DST_TRX_USER_KEY4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_DST_TRX_USER_KEY5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJ_DOC_DST_TRX_USER_KEY6(i)     := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJUSTED_DOC_NUMBER(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJUSTED_DOC_DATE(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_TO_APPLICATION_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_TO_ENTITY_CODE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_TO_EVENT_CLASS_CODE(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_TO_TRX_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_HDR_TRX_USER_KEY1(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_HDR_TRX_USER_KEY2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_HDR_TRX_USER_KEY3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_HDR_TRX_USER_KEY4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_HDR_TRX_USER_KEY5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_HDR_TRX_USER_KEY6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_TO_TRX_LINE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_LIN_TRX_USER_KEY1(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_LIN_TRX_USER_KEY2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_LIN_TRX_USER_KEY3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_LIN_TRX_USER_KEY4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_LIN_TRX_USER_KEY5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APP_TO_LIN_TRX_USER_KEY6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.RELATED_DOC_APPLICATION_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.RELATED_DOC_ENTITY_CODE(i)     := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.RELATED_DOC_EVENT_CLASS_CODE(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.RELATED_DOC_TRX_ID(i)          := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REL_DOC_HDR_TRX_USER_KEY1(i)   := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REL_DOC_HDR_TRX_USER_KEY2(i)   := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REL_DOC_HDR_TRX_USER_KEY3(i)   := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REL_DOC_HDR_TRX_USER_KEY4(i)   := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REL_DOC_HDR_TRX_USER_KEY5(i)   := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REL_DOC_HDR_TRX_USER_KEY6(i)   := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.RELATED_DOC_NUMBER(i)          := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.RELATED_DOC_DATE(i)            := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REVERSED_APPLN_ID(i)           := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REVERSED_ENTITY_CODE(i)        := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REVERSED_EVNT_CLS_CODE(i)      := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REVERSED_TRX_ID(i)             := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REVERSED_TRX_LEVEL_TYPE(i)     := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REVERSED_TRX_LINE_ID(i)        := NULL;

    zx_global_structures_pkg.trx_line_dist_tbl.NUMERIC1(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.NUMERIC2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.NUMERIC3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.NUMERIC4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.NUMERIC5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.NUMERIC6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.NUMERIC7(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.NUMERIC8(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.NUMERIC9(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.NUMERIC10(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.CHAR1(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.CHAR2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.CHAR3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.CHAR4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.CHAR5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.CHAR6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.CHAR7(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.CHAR8(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.CHAR9(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.CHAR10(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DATE1(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DATE2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DATE3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DATE4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DATE5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DATE6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DATE7(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DATE8(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DATE9(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DATE10(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.internal_org_location_id(i) := l_internal_org_location_id;
         
    zx_global_structures_pkg.trx_line_dist_tbl.SOURCE_APPLICATION_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.SOURCE_ENTITY_CODE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.SOURCE_EVENT_CLASS_CODE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.SOURCE_TRX_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.SOURCE_LINE_ID(i)    := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.SOURCE_TRX_LEVEL_TYPE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.REF_DOC_TRX_LEVEL_TYPE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_TO_TRX_LEVEL_TYPE(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_FROM_TRX_LEVEL_TYPE(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.ADJUSTED_DOC_TRX_LEVEL_TYPE(i):= NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DEFAULTING_ATTRIBUTE1(i)  := 'N';
    zx_global_structures_pkg.trx_line_dist_tbl.DEFAULTING_ATTRIBUTE2(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DEFAULTING_ATTRIBUTE3(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DEFAULTING_ATTRIBUTE4(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DEFAULTING_ATTRIBUTE5(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DEFAULTING_ATTRIBUTE6(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DEFAULTING_ATTRIBUTE7(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DEFAULTING_ATTRIBUTE8(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DEFAULTING_ATTRIBUTE9(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.DEFAULTING_ATTRIBUTE10(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.SOURCE_TAX_LINE_ID(i)  := NULL;
    zx_global_structures_pkg.trx_line_dist_tbl.APPLIED_FROM_TRX_NUMBER(i)  := NULL;

    zx_global_structures_pkg.trx_line_dist_tbl.SHIP_THIRD_PTY_ACCT_SITE_ID(i)   := r_ship_locinfo.cust_acct_site_id;
    zx_global_structures_pkg.trx_line_dist_tbl.BILL_THIRD_PTY_ACCT_SITE_ID(i)   := r_bill_locinfo.cust_acct_site_id;
    zx_global_structures_pkg.trx_line_dist_tbl.SHIP_TO_CUST_ACCT_SITE_USE_ID(i) := r_ship_locinfo.site_use_id;
    zx_global_structures_pkg.trx_line_dist_tbl.BILL_TO_CUST_ACCT_SITE_USE_ID(i) := r_bill_locinfo.site_use_id;
    zx_global_structures_pkg.trx_line_dist_tbl.SHIP_THIRD_PTY_ACCT_ID(i)        := r_ship_locinfo.cust_account_id;
    zx_global_structures_pkg.trx_line_dist_tbl.BILL_THIRD_PTY_ACCT_ID(i)        := r_bill_locinfo.cust_account_id;

    l_transaction_rec.application_id   := l_application_id;
    l_transaction_rec.entity_code      := l_entity_code_crsr;
    l_transaction_rec.event_class_code := l_event_class_code_crsr;
    l_transaction_rec.event_type_code  := 'CREATE';
    l_transaction_rec.trx_id           := l_header_id;
    l_transaction_rec.internal_organization_id := p_org_id;

    zx_api_pub.calculate_tax(
                        p_api_version        =&gt; 1.0,
                        p_init_msg_list      =&gt; FND_API.G_TRUE,
                        p_commit             =&gt; NULL,
                        p_validation_level   =&gt; NULL,
                        x_return_status      =&gt; l_return_status,
                        x_msg_count          =&gt; l_msg_count,
                        x_msg_data           =&gt; l_msg_data,
                        p_transaction_rec    =&gt; l_transaction_rec,
                        p_quote_flag         =&gt; 'Y',
                        p_data_transfer_mode =&gt; 'PLS',
                        x_doc_level_recalc_flag =&gt; l_doc_level_recalc_flag);

    -- Verifica se ocorreu algum erro
    IF l_return_status != FND_API.G_RET_STS_SUCCESS THEN
       
      px_return_status := C_ERROR;
    
      IF l_msg_count = 1 THEN
        
        -- there is one message raised by the API
        l(l_msg_data);
        
        IF l_msg_data is not null then
          px_message_error := l_msg_data;
        ELSE
          px_message_error := 'Erro indefinido na chamada da API zx_api_pub.calculate_tax';
        END IF;

      ELSIF l_msg_count &gt; 1 THEN
        
        LOOP
          
          l_msg_data := FND_MSG_PUB.GET(FND_MSG_PUB.G_NEXT,FND_API.G_FALSE);
          
          EXIT WHEN l_msg_data IS NULL;
          
          IF px_message_error IS NULL THEN
            px_message_error := l_msg_data;
          ELSE
            px_message_error := Substr(px_message_error || ' - '|| l_msg_data, 1, 2000);
          END IF;
          
        END LOOP;
      END IF;
      
      RAISE exit_excp;
      
    END IF;
    
  EXCEPTION
    WHEN exit_excp THEN
      ROLLBACK;
    WHEN OTHERS THEN
      ROLLBACK;
      px_return_status := C_ERROR;
      px_message_error := 'Erro inesperado. Erro: '||SQLERRM;
  END Calculate_Tax;
  
BEGIN

  MO_GLOBAL.SET_POLICY_CONTEXT(p_access_mode  =&gt; 'S', p_org_id =&gt; 81);

  -- Chama a rotina para carregar informações do imposto
  Calculate_Tax(p_org_id             =&gt; 81
              , p_order_type_id      =&gt; 1370
              , p_sold_to_org_id     =&gt; 3592570
              , p_organization_id    =&gt; 115
              , p_inventory_item_id  =&gt; 11734850
              , p_ship_from_org_id   =&gt; 115
              , p_ship_to_org_id     =&gt; 112975
              , p_invoice_to_org_id  =&gt; 112974
              , p_ordered_quantity   =&gt; 5000
              , p_unit_selling_price =&gt; 4.26
              , p_fob_point_code     =&gt; 'CIF'
              , p_salesrep_id        =&gt; 100011117
              , px_return_status     =&gt; w_return_status
              , px_message_error     =&gt; w_message_error);
  
  IF w_return_status != C_SUCCESS THEN
    l('ERRO: '||w_message_error);
  ELSE
    l('SUCESSO!');
  END IF;
  
END;
</pre>
<p>Se foi útil, ou se você apenas gostou, peço que compartilhe com seus contatos, poderá ser muito útil para eles.<br />
Qualquer dúvida comenta aqui no blog.</p>
<p>Grande Abraço</p>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/ebs-calculo-de-impostos-api-do-oracle-zx_api_pub-calculate_tax/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Outsourcing de TI como diferencial competitivo</title>
		<link>https://genilto.com/outsourcing-de-ti-como-diferencial-competitivo/</link>
					<comments>https://genilto.com/outsourcing-de-ti-como-diferencial-competitivo/#respond</comments>
		
		<dc:creator><![CDATA[Genilto Vanzin]]></dc:creator>
		<pubDate>Sat, 04 Jul 2015 05:50:36 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Gerenciamento]]></category>
		<category><![CDATA[competitivo]]></category>
		<category><![CDATA[diferencial]]></category>
		<category><![CDATA[informação]]></category>
		<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">https://genilto.com/?p=1618</guid>

					<description><![CDATA[Fala Galera, estou postando para quem tiver interesse, esse foi o meu Artigo de Sistemas de Informação. Aborda um assunto bastante atual que é o outsourcing de TI. Para quem ...]]></description>
										<content:encoded><![CDATA[<p>Fala Galera, estou postando para quem tiver interesse, esse foi o meu Artigo de Sistemas de Informação. Aborda um assunto bastante atual que é o outsourcing de TI.</p>
<p>Para quem tiver interesse, está aí o artigo na íntegra.</p>
<hr />
<p style="text-align: center;"><span class="a">Genilto Vanzin<br /></span><span class="a">Djone Kochanski</span></p>
<div class="ff0" style="text-align: center;"><span class="a">Faculdade Metropolitana de Blumenau – FAMEBLU<br /></span><span class="a">Bacharelado em Sistemas de Informação – Trabalho de Graduação II<br /></span><span class="a">04/12/2009</span></div>
<h3 class="ff5">RESUMO</h3>
<div class="ff5"> </div>
<div class="ff2" style="text-align: justify;"><em><span class="a">Manter a estrutura de tecnologia de informação atualmente não se mostra papel fácil para as</span><span class="a">organizações, uma vez que esta vem se tornando cada vez mais complexa e difícil de ser mantida</span><span class="a">atualizada às novas tendências e, é neste sentido que o presente artigo demonstra que aderir à</span><span class="a">idéia de terceirização desses serviços, o chamado outsourcing de TI, pode representar em uma</span><span class="a"> prática interessante. O objetivo disso é alcançar melhores resultados de produtividade e</span><span class="a"> flexibilidade para enfrentar mudanças bruscas de cenários bem como possibilitar que a empresa</span><span class="a">mantenha o foco em seu negócio principal e, assim, possibilitar um melhor posicionamento da</span><span class="a">empresa com relação a seus concorrentes.</span></em></div>
<div class="ff2" style="text-align: justify;"> </div>
<div class="ff2" style="text-align: justify;">
<div class="ff5"><strong><span class="a">Palavras-chave: </span><span class="a">Outsourcing</span><span class="a">; Tecnologia de Informação; Diferencial Competitivo.</span></strong></div>
</div>
<h4 class="ff5"><em><strong>Confira abaixo o artigo completo:</strong></em></h4>
<p style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal;"><a style="text-decoration: underline;" title="View Outsourcing de Ti Genilto Vanzin V on Scribd" href="https://pt.scribd.com/doc/56517432/Outsourcing-de-Ti-Genilto-Vanzin-V">Outsourcing de Ti Genilto Vanzin V</a> by <a style="text-decoration: underline;" title="View geniltovanzin's profile on Scribd" href="https://www.scribd.com/geniltovanzin">geniltovanzin</a></p>


<figure class="wp-block-embed is-type-rich is-provider-scribd wp-block-embed-scribd wp-embed-aspect-9-16 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Outsourcing de Ti Genilto Vanzin V" class="scribd_iframe_embed" src="https://www.scribd.com/embeds/56517432/content" data-aspect-ratio="0.7080062794348508" scrolling="no" id="56517432" width="800" height="1000" frameborder="0"></iframe><script type="text/javascript">          (function() { var scribd = document.createElement("script"); scribd.type = "text/javascript"; scribd.async = true; scribd.src = "https://www.scribd.com/javascripts/embed_code/inject.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(scribd, s); })()        </script>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://genilto.com/outsourcing-de-ti-como-diferencial-competitivo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
