Skip to content

Commit

Permalink
feat(antifraude): transação
Browse files Browse the repository at this point in the history
Implementado o modelo referente ao antifraude
  • Loading branch information
glauberalmeida committed Oct 11, 2020
1 parent 9487649 commit 7b6b567
Show file tree
Hide file tree
Showing 18 changed files with 6,588 additions and 1 deletion.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cielo",
"version": "2.3.0",
"version": "2.4.0",
"description": "Client para a API 3.0 da Cielo em node.js",
"main": "dist/index.js",
"scripts": {
Expand Down
107 changes: 107 additions & 0 deletions src/enums.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,110 @@ export enum EnumRecurrentPaymentUpdateInterval {
SEMIANNUAL = 6,
ANNUAL = 12,
}

export enum EnumTypeFlowAnalysisFraud {
AnalyseFirst = 'AnalyseFirst',
AuthorizeFirst = 'AuthorizeFirst'
}
export enum EnumSequenceCriteria {
OnSuccess = 'OnSuccess',
Always = 'Always'
}

export enum EnumShippingMethod {
SameDay = 'SameDay', // Meio de entrega no mesmo dia
OneDay = 'OneDay', // Meio de entrega no próximo dia
TwoDay = 'TwoDay', // Meio de entrega em dois dias
ThreeDay = 'ThreeDay', // Meio de entrega em três dias
LowCost = 'LowCost', // Meio de entrega de baixo custo
Pickup = 'Pickup', // Retirada na loja
Other = 'Other', // Outro meio de entrega
None = 'None' // Sem meio de entrega, pois é um serviço ou assinatura
}

export enum EnumTravelJourneyType {
OneWayTrip = 'OneWayTrip', // Viagem somente de ida
RoundTrip = 'RoundTrip' // Viagem de ida e volta
}

export enum EnumTravelPassengersStatus {
Standard = 'Standard',
Gold = 'Gold',
Platinum = 'Platinum'
}

export enum EnumTravelPassengersRating {
Adult = 'Adult', // Adulto
Child = 'Child', // Criança
Infant = 'Infant' // Infantil
}

export enum EnumCartCategory {
Yes = 'Yes', // Em caso de divergência entre endereços de cobrança e entrega, atribui risco baixo ao pedido
No = 'No', // Em caso de divergência entre endereços de cobrança e entrega, atribui risco alto ao pedido (default)
Off = 'Off' // Diferenças entre os endereços de cobrança e entrega não afetam a pontuação
}

export enum EnumCartHostHedge {
Low = 'Low', // Baixa
Normal = 'Normal', // Normal (default)
High = 'High', // Alta
Off = 'Off' // Não irá afetar o score da análise de fraude
}

export enum EnumCartNonSensicalHedge {
Low = 'Low', // Baixa
Normal = 'Normal', // Normal (default)
High = 'High', // Alta
Off = 'Off' // Não irá afetar o score da análise de fraude
}

export enum EnumCartObscenitiesHedge {
Low = 'Low', // Baixa
Normal = 'Normal', // Normal (default)
High = 'High', // Alta
Off = 'Off' // Não irá afetar o score da análise de fraude
}

export enum EnumCartPhoneHedge {
Low = 'Low', // Baixa
Normal = 'Normal', // Normal (default)
High = 'High', // Alta
Off = 'Off' // Não irá afetar o score da análise de fraude
}

export enum EnumCartTimeHedge {
Low = 'Low', // Baixa
Normal = 'Normal', // Normal (default)
High = 'High', // Alta
Off = 'Off' // Não irá afetar o score da análise de fraude
}
export enum EnumCartType {
AdultContent = 'AdultContent', // Conteúdo adulto
Coupon = 'Coupon', // Cupom aplicado para todo o pedido
Default = 'Default', // Valor default para o tipo do produto. Quando não enviado nenhum outro valor, assume-se o tipo sendo este
EletronicGood = 'EletronicGood', // Produto eletônico diferente de software
EletronicSoftware = 'EletronicSoftware', // Softwares distribuídos eletronicamente via download
GiftCertificate = 'GiftCertificate', // Vale presente
HandlingOnly = 'HandlingOnly', // Taxa que você cobra do seu cliente para cobrir os seus custos administrativos de venda. Ex.: Taxa de conveniência / Taxa de instalação
Service = 'Service', // Serviço que será realizado para o cliente
ShippingAndHandling = 'ShippingAndHandling', // Valor do frete e e taxa que você cobra do seu cliente para cobrir os seus custos administrativos de venda
ShippingOnly = 'ShippingOnly', // Valor do frete
Subscription = 'Subscription', // Assinatura. Ex.: Streaming de vídeos / Assinatura de notícias
}

export enum EnumCartVelocityHedge {
Low = 'Low', // Baixa
Normal = 'Normal', // Normal (default)
High = 'High', // Alta
Off = 'Off' // Não irá afetar o score da análise de fraude
}

export enum EnumFraudAnalysisStatus {
Unknown = 0,
Accept = 1,
Reject = 2,
Review = 3,
Aborted = 4,
Unfinished = 5
}
5 changes: 5 additions & 0 deletions src/models/customer.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ export interface CustomerModel {
* Data de nascimento do Comprador.
*/
birthdate?: string;
/**
* Número do telefone do comprador
Ex.: 5521976781114
*/
phone?: string;
/**
* Endereço do Comprador.
*/
Expand Down
33 changes: 33 additions & 0 deletions src/models/fraud-analysis/browser.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
export interface BrowserModel {
/** Identificador utilizado para cruzar informações obtidas do
* dispositivo do comprador. Este mesmo identificador deve ser utilizado
* para gerar o valor que será atribuído ao campo session_id do script ou
* utilizando os SDKs (iOS ou Android) que será incluído na página de checkout.
* Obs.: Este identificador poderá ser qualquer valor ou o número do pedido,
* mas deverá ser único durante 48 horas
*/
browserFingerprint: string,
/**
* Identifica se o browser do comprador aceita cookies
* Possíveis valores: true / false (default
*/
cookiesAccepted: boolean,
/**
* Não E-mail registrado no browser do comprador.
* Pode diferenciar do e-mail de cadastro na loja(Customer.Email)
*/
email?:string,
/**
* Nome do host informado pelo browser do comprador e identificado através do cabeçalho HTTP
*/
hostName?: string,
/**
* Endereço de IP do comprador. Formato IPv4 ou IPv6
*/
ipAddress: string,
/**
* Nome do browser utilizado pelo comprador e identificado através do cabeçalho HTTP
* Ex.: Google Chrome, Mozilla Firefox, Safari, etc
*/
type?: string
}
84 changes: 84 additions & 0 deletions src/models/fraud-analysis/cart-Items.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import {
EnumCartCategory,
EnumCartHostHedge,
EnumCartNonSensicalHedge,
EnumCartObscenitiesHedge,
EnumCartPhoneHedge,
EnumCartType,
EnumCartVelocityHedge
} from "../../enums";

export interface CartItemsModel {
/**
* Identifica que avaliará os endereços de cobrança e entrega
* para diferentes cidades, estados ou países
* Tabela 1 - Payment.Fraudanalysis.Cart.Items{n}.GiftCategory
* https://developercielo.github.io/manual/cielo-ecommerce#tabela-1-payment.fraudanalysis.cart.tems[n].giftcategory
*/
giftCategory?: EnumCartCategory,
/**
* Nível de importância dos endereços de IP e e-mail do comprador na análise de fraude
* Tabela 2 - Payment.Fraudanalysis.Cart.Items{n}.HostHedge
* https://developercielo.github.io/manual/cielo-ecommerce#tabela-2-payment.fraudanalysis.cart.items[n].hosthedge
*/
hostHedge?: EnumCartHostHedge,
/**
* Nível de importância das verificações sobre os dados do comprador sem sentido na análise de fraude
* Tabela 3 - Cart.Items{n}.NonSensicalHedge
* https://developercielo.github.io/manual/cielo-ecommerce#tabela-3-payment.fraudanalysis.cart.items[n].nonsensicalhedge
*/
nonSensicalHedge?: EnumCartNonSensicalHedge,
/**
* Nível de importância das verificações sobre os dados do comprador com obscenidade na análise de fraude
* Tabela 4 - Payment.Fraudanalysis.Cart.Items{n}.ObscenitiesHedge
* https://developercielo.github.io/manual/cielo-ecommerce#tabela-4-payment.fraudanalysis.cart.items[n].obscenitieshedge
*/
obscenitiesHedge?: EnumCartObscenitiesHedge,
/**
* Nível de importância das verificações sobre os números de telefones do comprador na análise de fraude
* Tabela 5 - Payment.Fraudanalysis.Cart.Items{n}.PhoneHedge
*/
phoneHedge?: EnumCartPhoneHedge,
/**
* Nome do Produto
*/
name: string,
/**
* Quantidade do produto
*/
quantity: number,
/**
* SKU (Stock Keeping Unit - Unidade de Controle de Estoque) do produto
*/
sku: string,
/**
* Preço unitário do produto
* Ex: 10950 = r$ 109,50
*/
unitPrice: number,
/**
* Nível de risco do produto associado a quantidade de chargebacks
* Tabela 6 - Payment.Fraudanalysis.CartI.tems{n}.Risk
* https://developercielo.github.io/manual/cielo-ecommerce#tabela-6-payment.fraudanalysis.cart.items[n].risk
*/
risk?: string,
/**
* Nível de importância da hora do dia na análise de fraude que o comprador realizou o pedido
* Tabela 7 - Payment.Fraudanalysis.Cart.Items{n}.TimeHedge
* https://developercielo.github.io/manual/cielo-ecommerce#tabela-7-payment.fraudanalysis.cart.items[n].timehedge
*/
timeHedge?: string,
/**
* Categoria do produto
* Tabela 8 - Payment.Fraudanalysis.Cart.Items{n}.Type
* https://developercielo.github.io/manual/cielo-ecommerce#tabela-8-payment.fraudanalysis.cart.items[n].type
*/
type?: EnumCartType,
/**
* Nível de importância da frequência de compra do comprador na análise
* de fraude dentros dos 15 minutos anteriores
* Tabela 9 - Payment.Fraudanalysis.Cart.Items{n}.VelocityHedge
* https://developercielo.github.io/manual/cielo-ecommerce#tabela-9-payment.fraudanalysis.cart.items[n].velocityhedge
* */
velocityHedge?: EnumCartVelocityHedge
}
14 changes: 14 additions & 0 deletions src/models/fraud-analysis/cart.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { CartItemsModel } from "./cart-Items.model"

export interface CartModel {
/**
* Indica se o pedido realizado pelo comprador é para presente
*/
isGift?: boolean,
/**
* Indica se o pedido realizado pelo comprador pode ser devolvido a loja
* Possíveis valores: true / false (default)
*/
returnsAccepted: true,
items?: Array<CartItemsModel>
}
9 changes: 9 additions & 0 deletions src/models/fraud-analysis/fraud-analysis-response.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { EnumFraudAnalysisStatus } from "../../enums";
import { ReplyDataResponseModel } from "./replay-data.model";

export interface FraudAnalysisResponseModel {
id: string,
status: EnumFraudAnalysisStatus,
fraudAnalysisReasonCode: number
replyData: ReplyDataResponseModel
}
76 changes: 76 additions & 0 deletions src/models/fraud-analysis/fraud-analysis.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import { EnumSequenceCriteria, EnumTypeFlowAnalysisFraud } from "../../enums"
import { BrowserModel } from "./browser.model"
import { CartModel } from "./cart.model"
import { MerchantModel } from "./merchant.model"
import { ShippingModel } from "./shipping.model"
import { TravelModel } from "./travel.model"

export interface FraudAnalysisModel {
/**
* Provedor de AntiFraude
* Possíveis valores: Cybersource
*/
provider?: string,
/**
* Tipo de fluxo da análise de fraude
* Possíveis valores: AnalyseFirst / AuthorizeFirst
*/
sequence?: EnumTypeFlowAnalysisFraud,
/**
* Critério do fluxo da análise de fraude
* Possíveis valores: OnSuccess / Always
*/
sequenceCriteria?: EnumSequenceCriteria,
/**
* Indica se a transação após a análise de fraude será capturada
* Possíveis valores: true / false (default)
* Obs.: Quando enviado igual a true e o retorno da análise de fraude for
* de baixo risco (Accept) a transação anteriormente autorizada será capturada
* Obs2.: Quando enviado igual a true e o retorno da análise de fraude for
* revisão (Review) a transação ficará autorizada. A mesma será capturada após
* a Cielo receber o novo status da análise manual e este for de baixo risco (Accept)
* Obs.: Para a utilização deste parâmetro, a sequência do fluxo de análise de
* risco deve ser obrigatoriamente AuthorizeFirst
*/
captureOnLowRisk?: boolean,
/**
* Indica se a transação após a análise de fraude será cancelada
* Possíveis valores: true / false (default)
* Obs.: Quando enviado igual a true e o retorno da análise de fraude for de alto
* risco (Reject) a transação anteriormente autorizada será cancelada
* Obs2.: Quando enviado igual a true e o retorno da análise de fraude for
* revisão (Review) a transação ficará autorizada. A mesma será cancelada após a
* Cielo receber o novo status da análise manual e este for alto risco (Reject)
* Obs.: Para a utilização deste parâmetro, a sequência do fluxo de análise de
* risco deve ser obrigatoriamente AuthorizeFirst
*/
voidOnHighRisk?: boolean,
/**
* Valor total do pedido em centavos
* Ex: 123456 = r$ 1.234,56
*/
totalOrderAmount?: number,
/**Identificador utilizado para cruzar informações obtidas do dispositivo do comprador.
* Este mesmo identificador deve ser utilizado para gerar o valor que será atribuído
* ao campo session_id do script ou utilizando os SDKs (iOS ou Android) que será
* incluído na página de checkout. Obs.: Este identificador poderá ser qualquer
* valor ou o número do pedido, mas deverá ser único durante 48 horas
*/
browser?: BrowserModel,
/**
* Indica se o pedido realizado pelo comprador é para presente
*/
Cart?: CartModel,
/**
* ID das informações adicionais a serem enviadas
*/
merchantDefinedFields?: Array<MerchantModel>,
/**
* Endereço de entrega
*/
shipping?: ShippingModel,
/**
* Tipo de viagem
*/
travel?: TravelModel,
}
27 changes: 27 additions & 0 deletions src/models/fraud-analysis/merchant.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
* Nível de Relevância
* 1 - Relevante
* 2 - Muito Relevante
* 3 - Extremamente Relevante
* Conforme nível de relevância dos campos e possibilidade de desenho da estratégia
* de risco de acordo com a necessidade do seu negócio, na validação das transações
* de testes os mesmos serão cobrados caso não sejam enviaos. Com isso, solicitamos
* uma análise prévia da documentação e sinalização dos campos que não serão
* possíveis de serem enviados.
* No caso de não possuir o dado para enviar, pedimos a gentileza de não enviar
* o campo correspondente como vazio, ou seja, apenas não enviar.
*/
export interface MerchantModel {
/**
* ID das informações adicionais a serem enviadas
* Tabela 20 - Payment.FraudAnalysis.MerchantDefinedFields
* https://developercielo.github.io/manual/cielo-ecommerce#tabela-20-payment.fraudanalysis.merchantdefinedfields
*/
id: number,
/**
* Valor das informações adicionais a serem enviadas
* Tabela 20 - Payment.FraudAnalysis.MerchantDefinedFields
* https://developercielo.github.io/manual/cielo-ecommerce#tabela-20-payment.fraudanalysis.merchantdefinedfields
*/
value: string
}
Loading

0 comments on commit 7b6b567

Please sign in to comment.