Git Product home page Git Product logo

psp's Introduction

Payment Service Provider

Contexto

Em sua essência um PSP tem duas funções muito importantes:

  1. Permitir que os usuários processem transações ("cash-in")
  2. Efetuar os pagamentos dos recebíveis para os nossos clientes ("cash-out") Nós iremos representar essas informações com duas entidades:
  • transactions: que representam as informações da compra, dados do cartão, valor, etc
  • payables: que representam os recebíveis que pagaremos ao cliente

Requisitos

  1. O serviço deve processar transações, recebendo as seguintes informações:
  • Valor da transação
  • Descrição da transação ('iPhone X 128GB Gray')
  • Método de pagamento (debit_card ou credit_card)
  • Número do cartão
  • Nome do portador do cartão
  • Data de validade do cartão
  • Código de verificação do cartão (CVV)
  1. O serviço deve retornar uma lista das transações já criadas.
  2. Como o número do cartão é uma informação sensível, o serviço só pode armazenar e retornar os 4 útlimos dígitos do cartão.
  3. O serviço deve criar os recebíveis do cliente (payables), com as seguintes regras:
  • Se a transação for feita com um cartão de débito:
    • O payable deve ser criado com status = paid (indicando que o cliente já recebeu esse valor).
    • O payable deve ser vriado com a data de pagamento (payment_date) = data da criação da transação (D+0).
  • Se a transação for feita com um cartão de crédito:
    • O payable deve ser criado com status = waiting_funds (indicando que o cliente vai receber esse dinheiro no futuro)
    • O payable deve ser criado com a data de pagamento (payment_date) = data da criação da transação + 30 dias (D+30).
  1. No momento de criação dos payables também deve ser descontado a taxa de processamento (que chamamos de fee) do cliente. Ex: se ataxa for 5% e o cliente processar uma transação de R$100,00, ele só receberá R$95,00. Considere as seguintes taxas:
  • 3% para transações feitas com um cartão de débito
  • 5% para transações feitas com um cartão de crédito
  1. O serviço deve prover um meio de consulta para que o cliente visualize seu saldo com as seguintes informações:
  • Saldo available (disponível): tudo que o cliente já recebeu (payables paid)
  • Saldo waiting_funds (a receber): tudo que o cliente tem a receber (payables waiting_funds)

Restrições

  1. O serviço deve ser escrito em Node.js
  2. O serviço deve armazenar informações em um banco de dados. Você pode escolher o banco que achar melhor. Nos utilizaremos MongoDB.

Obs

Quando um cliente passa uma transação de crédito, ele normalmente recebe o valor em média apenas 30 dias depois (o que chamamos de D+30), porque é assim que a cadeia financeira (bancos, bandeiras, adquirentes) funciona. Porém é possível receber esse valor antes dos 30 dias através de um mecanismo chamado "antecipação".

psp's People

Contributors

0xrfsd avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.