Objetivo deste artigo
Este artigo enumera como o processo de correspondência de lotes de impostos pode ser modelado e executado no Couchbase. Embora o modelo de dados em si seja algo subjetivo, este artigo listará apenas as principais entidades envolvidas no modelo e a consulta N1QL que pode ser usada para executar o processo de correspondência de lotes fiscais.
Antes de nos aprofundarmos na solução, presumo que o leitor esteja ciente ou disposto a investir algum tempo para se familiarizar com algumas das estruturas do N1QL, que são muito parecidas com o SQL, mas têm alguns recursos adicionais específicos do JSON.
- A cláusula NEST pode ser usada em matrizes para transpor linhas para colunas
- O UNNEST pode ser usado para desmontar uma matriz em linhas
Como os documentos JSON e o N1QL são tão ricos em recursos, seria muito útil fazer uma rápida introdução à sintaxe
https://learn.couchbase.com/store/
http://developer.couchbase.com/documentation/server/4.1/n1ql/n1ql-language-reference/index.html
O que é um lote fiscal?
A lote fiscal é um registro de uma transação de abertura (por exemplo, compra ou venda a descoberto) em seu portfólio. Se uma ordem for preenchida em várias partes, chamadas de preenchimentos parciais, os preços serão calculados pela média e representados por um único lote fiscal número. Você pode ter vários lotes fiscais dentro da posição geral de um título.
Cada vez que você compra um título, a nova posição é uma posição distinta e separada lote fiscal - mesmo que você já possua ações do mesmo título. (Um lote fiscal é um registro de uma transação e suas implicações fiscais, incluindo a data de compra e o número de ações).
A método de identificação do lote fiscal é a forma como determinamos quais lotes fiscais devem ser vendidos quando você tem uma posição que consiste em várias compras feitas em datas diferentes a preços diferentes e você entra em uma negociação para vender apenas parte da posição. Somos obrigados por lei a rastrear e manter essas informações e a informar a base de custo e os rendimentos para você e para o IRS.
Sua escolha do método de identificação do lote fiscal pode ter um impacto significativo no valor dos impostos que você pode pagar ao vender um ativo.
Metodologias de correspondência de lotes fiscais
As consultas apresentadas neste artigo mostrarão apenas o método FIFO, pois ele parece ser a metodologia mais popular, mas estou listando as metodologias mesmo assim
Primeiro a entrar, primeiro a sair (FIFO)
- O método padrão para correspondência de lotes fiscais. As vendas são emparelhadas com as primeiras compras sequencialmente. O FIFO pressupõe que os ativos remanescentes no estoque sejam combinados com os ativos comprados ou produzidos mais recentemente. O FIFO é sempre usado para futuros e opções sobre futuros.
Último a entrar, primeiro a sair (LIFO)
- Cada venda é combinada com a compra mais recente possível. O LIFO pressupõe que uma entidade venda, use ou descarte primeiro seu estoque mais recente.
Maximizar o ganho em longo prazo - As vendas são emparelhadas com base no seguinte conjunto de prioridades:
1. Maximizar o ganho de longo prazo por ação
2. Maximizar o ganho de curto prazo por ação
3. Minimizar o prejuízo de curto prazo por ação
4. Minimizar a perda de longo prazo por ação
Maximizar a perda em longo prazo - As vendas são emparelhadas com base no seguinte conjunto de prioridades:
1. Maximizar o prejuízo de longo prazo por ação
2. Maximizar o prejuízo de curto prazo por ação
3. Minimizar o ganho de curto prazo por ação
4. Minimizar o ganho de longo prazo por ação
Maximizar o ganho de curto prazo - As vendas são emparelhadas com base no seguinte conjunto de prioridades:
1. Maximizar o ganho de curto prazo por ação
2. Maximizar o ganho de longo prazo por ação
3. Minimizar a perda de longo prazo por ação
4. Minimizar o prejuízo de curto prazo por ação
Maximizar a perda em curto prazo - As vendas são emparelhadas com base no seguinte conjunto de prioridades:
1. Maximizar o prejuízo de curto prazo por ação
2. Maximizar o prejuízo de longo prazo por ação
3. Minimizar o ganho de longo prazo por ação
4. Minimizar o ganho de curto prazo por ação
Custo mais alto - Busca maximizar as perdas e minimizar os ganhos. As vendas são emparelhadas com base
nas seguintes regras:
- Primeiro, ele analisa todas as opções possíveis para combinar uma negociação de fechamento com um lote aberto.
- Se qualquer correspondência possível resultar em uma perda, o método escolherá a correspondência que
resulta na maior perda possível.
- Se nenhuma combinação possível resultar em uma perda, o método escolhe a combinação que resulta
com o menor ganho possível.
Lote específico - Permite que você veja todos os seus lotes fiscais e negociações de fechamento e, em seguida, combine manualmente os lotes
para negociações. O lote específico está disponível para hoje ou para uma posição, mas não está disponível como o
Account Default Match Method (Método de correspondência padrão da conta).
Usando um exemplo ao vivo
Dado que as entradas têm a seguinte aparência
As regras de negócios estabelecem que, para minimizar os impostos, cada transação precisa ser emparelhada com uma transação que ocorra após a transação atual com um TradeType oposto, por exemplo: B significa Buy (comprar) e precisará ser encerrada com uma transação que tenha o TradeType oposto, nesse caso S ou SELL (vender), e a Quantity (quantidade) precisa ser igual ou maior do que a transação que está sendo encerrada e precisa ter uma TradeDate (data de negociação) maior do que a TradeDate (data de negociação) da transação que está sendo encerrada.
Entidades em uma correspondência específica para lote fiscal
Supõe-se que isso esteja sendo executado por um fundo de hedge, uma empresa de serviços financeiros que atende a vários clientes, consumidores. Embora o # de elementos que são capturados seja muito mais abrangente do que o que está listado aqui, minha tentativa é apenas mostrar os elementos mais importantes que participam do processo de correspondência de lote fiscal. A modelagem disso no Couchbase pode seguir dois caminhos
- Se estiver migrando de um banco de dados relacional e quiser migrar rapidamente alguns dados e, em seguida, adaptar o NoSQL para que ele modele seus negócios, você poderá criar um tipo de documento para cada entidade, ou seja, Trader pode ser uma entidade, Instrument pode ser outra entidade. E você pode incluir um elemento de tipo em cada documento que signifique o tipo de documento
O modelo relacional de exemplo seria parecido com o seguinte,
Traduzindo isso literalmente para se adaptar a um modelo de documento, as entidades teriam a seguinte aparência
Exemplo de modelo desnormalizado para a entidade TradeOrder, que é realmente onde o processo de correspondência do TaxLot ocorrerá
Execução do processo de lote fiscal usando N1QL
Vamos usar o método FIFO para o TaxLot Matching. Embora esse processo seja muito adequado para uma linguagem funcional porque precisa iterar as linhas em uma ordem predeterminada e precisa armazenar em cache o conjunto de resultados, eu queria enumerar como você pode executar isso no N1QL devido à riqueza e versatilidade da linguagem.
Etapas
- Pressupõe-se que o leitor esteja familiarizado com o Couchbase e possa navegar pelo console de administração
- Crie um Bucket, vamos chamá-lo de Taxlot_Demo
- Crie os documentos necessários para que você tenha um bom banco de testes
- Em seguida, criaremos um bucket temporário que cria uma matriz de todas as negociações para um grupo de critérios de correspondência. Supondo que, neste caso, queremos fazer a correspondência apenas entre um determinado fundo, negociante, corretor, estratégia, instrumento e TradeType, a imagem antes e depois fica assim.
5.Em seguida, em uma única consulta, obteremos as correspondências do lote de impostos. Como a consulta alcança muito, vou dividi-la em etapas para facilitar a compreensão e listar a consulta completa no final. A etapa e é a única consulta necessária para executar o processo Taxlot no Couchbase; os marcadores intermediários a, b, c, d apenas enumeram a consulta maior na etapa e.
a. A consulta mais interna na etapa f cria uma coluna concatenada que pode ser combinada com a chave da etapa 4.
b. Em seguida, eu a uno à tabela materializada criada na etapa 4. O resultado dessa consulta será cada negociação dentro de um critério de agrupamento e a matriz de possíveis correspondências.
c. Em seguida, eu UNNEST o array para criar uma relação de muitos para muitos entre todas as linhas do grupo FundId, TraderId, BrokerId, Strategy, InstrumentId, LongShort
d. Em seguida, aplico as regras de negócios para obter uma transação com assinatura oposta e encontrar uma correspondência de lote fiscal
e. E, por fim, devolver apenas os registros que precisam ser encerrados.
Resultados
Portanto, se o seu conjunto de dados for assim, a operação 1 será encerrada com a operação 2, já que a operação 1 é uma transação de COMPRA e corresponde à operação 1, que é uma transação de VENDA. A negociação 3 não tem uma correspondência, portanto, não será encerrada.
Da mesma forma, a negociação 4 é encerrada com a negociação 5.
As negociações 7 a 9 são todas transações de COMPRA e não têm uma transação de VENDA correspondente e, portanto, não são fechadas
Conclusão
O objetivo deste artigo foi enumerar como o N1QL pode ser usado para resolver consultas de acesso a dados muito complexas. Se alguém está acostumado a escrever funcionalidades complexas em SQL, agora isso pode ser feito facilmente em N1QL. Os exemplos usados neste artigo foram propositalmente simplificados para facilitar o acompanhamento. É possível que alguns ajustes ou junções ou consultas extras precisem ser adicionados para chegar ao resultado que sua organização está buscando obter.
Para entender melhor a arquitetura do Couchbase Server, consulte o seguinte link https://www.couchbase.com/downloads/?family=couchbase-server/
Para conhecer melhor o N1Ql e as construções que ele oferece, acesse este link
https://developer.couchbase.com/documentation/server/4.1/n1ql/index.html
____________________________________________________________________________
Este artigo foi escrito por Sandhya Krishnamurthy, engenheira de soluções sênior da Couchbaseum dos principais fornecedores de bancos de dados NoSQL.
Entre em contato com o autor em sandhya.krishnamurthy@couchbase.com
- Fale conosco nos fóruns
- Siga-nos @couchbasedev e @couchbase
Visite os sites abaixo para saber mais sobre os produtos Couchbase, para fazer downloads gratuitos de produtos e treinamento gratuito
https://www.couchbase.com/downloads/
https://learn.couchbase.com/store/