Skip to content

Instantly share code, notes, and snippets.

@pinhopro
Last active July 28, 2021 19:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pinhopro/d0e0189a88c1916144053fd1ec9ece89 to your computer and use it in GitHub Desktop.
Save pinhopro/d0e0189a88c1916144053fd1ec9ece89 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
// Available variables:
// - Machine
// - interpret
// - assign
// - send
// - sendParent
// - spawn
// - raise
// - actions
// - XState (all XState exports)
const fetchMachine = Machine({
id: "negociacao_venda",
initial: "idle",
context: {
tem_multa: true
},
states: {
idle: {
on: {
CRIA_NOVA_OFERTA_EXCLUSIVA_PARA_COMPRADOR: "Aguarda_comprador_aceitar_oferta",
CHATBOT_CRIA_NOVA_OFERTA_EXCLUSIVA_PARA_COMPRADOR: "Aguarda_comprador_aceitar_oferta"
}
},
Aguarda_comprador_aceitar_oferta: {
entry: ["gera_link_para_oferta"],
on: {
COMPRADOR_ACEITA_OFERTA: "Aguardando_primeiro_pgto",
COMPRADOR_REJEITA_OFERTA: "Rejeitada",
TEMPO_PARA_ACEITAR_EXPIRA: "Expirada",
VENDEDOR_CANCELA_OFERTA: "Cancelado"
}
},
Expirada: {
on: {
VENDEDOR_MELHORA_OU_REATIVA_OFERTA: "Aguarda_comprador_aceitar_oferta",
VENDEDOR_ARQUIVA_OFERTA: "Cancelado"
}
},
Rejeitada: {
type: "final"
},
Cancelado: {
type: "final"
},
Aguardando_primeiro_pgto: {
on: {
PRAZO_DO_COMPRADOR_PARA_PAGTO_EXPIRA: "PrazoPagamentoExpirado",
COMPRADOR_NOTIFICA_PGTO_PARCIAL: "Aguardando_primeiro_pgto",
COMPRADOR_NOTIFICA_PGTO_COMPLETO:
[ {target: "Aguardando_primeiro_pgto", cond: "se_soma_valores_notificados_for_igual_total_devido" }],
COMPRADOR_DESISTE_NEGOCIO: "Cancelamento_solicitado_comprador",
VENDEDOR_CONFIRMA_PGTO_PARCIAL: "Aguardando_pgto_completo",
VENDEDOR_CONFIRMA_PGTO_COMPLETO: "Aguardando_vendedor_enviar_produto",
VENDEDOR_ENVIA_PARCIAL_PRODUTO: "Aguardando_primeiro_pgto",
VENDEDOR_ENVIA_TOTAL_PRODUTO: "Aguardando_primeiro_pgto_produto_enviado",
VENDEDOR_NOTIFICA_CONFLITO: "Conflito",
COMPRADOR_NOTIFICA_CONFLITO: "Conflito"
}
},
PrazoPagamentoExpirado: {
on: {
VENDEDOR_FAZ_CANCELAMENTO_SEM_MULTA: "Cancelado",
VENDEDOR_SOLICITA_CANCELAMENTO_COM_MULTA: [ { target: "Aguardando_comprador_aceitar_multa", cond: "se_contrato_tem_multa"} ],
COMPRADOR_NOTIFICA_PGTO_PARCIAL: "PrazoPagamentoExpirado",
COMPRADOR_NOTIFICA_PGTO_COMPLETO:
[ {target: "PrazoPagamentoExpirado", cond: "se_soma_valores_notificados_for_igual_total_devido" }],
COMPRADOR_DESISTE_NEGOCIO: "Cancelamento_solicitado_comprador",
VENDEDOR_EXIGE_MULTA_PARA_CONTINUAR_CONTRATO: [ { target: "Aguardando_primeiro_pgto_mais_multa", cond: "se_contrato_tem_multa"} ],
VENDEDOR_CONCEDE_PRAZO_EXTRA_PARA_PAGTO: "Aguardando_primeiro_pgto",
VENDEDOR_CONFIRMA_PGTO_PARCIAL_COM_ABONO_DE_MULTA: "Aguardando_pgto_completo",
VENDEDOR_CONFIRMA_PGTO_COMPLETO_COM_ABONO_DE_MULTA: "Aguardando_vendedor_enviar_produto",
VENDEDOR_NOTIFICA_CONFLITO: "Conflito",
COMPRADOR_NOTIFICA_CONFLITO: "Conflito"
}
},
Aguardando_primeiro_pgto_mais_multa: {
entry: [ "adc_multa_ao_valor_devido()" ],
on: {
PRAZO_DO_COMPRADOR_PARA_PAGTO_EXPIRA: "PrazoPagamentoComMultaExpirado",
COMPRADOR_NOTIFICA_PGTO_PARCIAL: "Aguardando_primeiro_pgto_mais_multa",
COMPRADOR_NOTIFICA_PGTO_COMPLETO:
[ {target: "Aguardando_primeiro_pgto_mais_multa", cond: "se_soma_valores_notificados_for_igual_total_devido" }],
COMPRADOR_DESISTE_NEGOCIO: "Cancelamento_solicitado_comprador",
VENDEDOR_CONFIRMA_PGTO_PARCIAL: "Aguardando_pgto_completo",
VENDEDOR_CONFIRMA_PGTO_COMPLETO: "Aguardando_vendedor_enviar_produto",
VENDEDOR_ENVIA_PARCIAL_PRODUTO: "Aguardando_primeiro_pgto_mais_multa",
VENDEDOR_ENVIA_TOTAL_PRODUTO: "Aguardando_primeiro_pgto_produto_enviado",
VENDEDOR_NOTIFICA_CONFLITO: "Conflito",
COMPRADOR_NOTIFICA_CONFLITO: "Conflito"
}
},
PrazoPagamentoComMultaExpirado: {
on: {
COMPRADOR_NOTIFICA_PGTO_PARCIAL: "PrazoPagamentoComMultaExpirado",
COMPRADOR_NOTIFICA_PGTO_COMPLETO:
[ {target: "PrazoPagamentoComMultaExpirado", cond: "se_soma_valores_notificados_for_igual_total_devido" }],
COMPRADOR_DESISTE_NEGOCIO: "Cancelamento_solicitado_comprador",
VENDEDOR_FAZ_CANCELAMENTO_SEM_MULTA: "Cancelado",
VENDEDOR_CONCEDE_PRAZO_EXTRA_PARA_PAGTO: "Aguardando_primeiro_pgto_mais_multa",
VENDEDOR_CONFIRMA_PGTO_PARCIAL: "Aguardando_pgto_completo",
VENDEDOR_CONFIRMA_PGTO_COMPLETO: "Aguardando_vendedor_enviar_produto",
VENDEDOR_NOTIFICA_CONFLITO: "Conflito",
COMPRADOR_NOTIFICA_CONFLITO: "Conflito"
}
},
Aguardando_pgto_completo_com_exigencia_de_multa_por_atraso: {
entry: ["mostra_tela_pagto"],
on: {
COMPRADOR_NOTIFICA_PGTO_PARCIAL: "Aguardando_pgto_completo_com_exigencia_de_multa_por_atraso",
COMPRADOR_NOTIFICA_PGTO_COMPLETO:
[ {target: "Aguardando_pgto_completo_com_exigencia_de_multa_por_atraso", cond: "se_soma_valores_notificados_for_igual_total_devido" }],
COMPRADOR_DESISTE_NEGOCIO: "Cancelamento_solicitado_comprador",
VENDEDOR_CONFIRMA_PGTO_PARCIAL: "Aguardando_pgto_completo_com_exigencia_de_multa_por_atraso",
VENDEDOR_CONFIRMA_PGTO_COMPLETO_COM_ABONO_DE_MULTA: "Aguardando_vendedor_enviar_produto",
VENDEDOR_CONFIRMA_PGTO_COMPLETO: "Aguardando_vendedor_enviar_produto",
VENDEDOR_ENVIA_PARCIAL_PRODUTO: "Aguardando_pgto_completo_com_exigencia_de_multa_por_atraso",
VENDEDOR_ENVIA_TOTAL_PRODUTO: "Aguardando_pgto_produto_enviado",
}
},
Aguardando_pgto_completo: {
entry: ["mostra_tela_pagto"],
on: {
COMPRADOR_NOTIFICA_PGTO_PARCIAL: "Aguardando_pgto_completo",
COMPRADOR_NOTIFICA_PGTO_COMPLETO: "Aguardando_pgto_completo",
COMPRADOR_DESISTE_NEGOCIO: "Cancelamento_solicitado_comprador",
VENDEDOR_CONFIRMA_PGTO_PARCIAL: "Aguardando_pgto_completo",
VENDEDOR_CONFIRMA_PGTO_COMPLETO: "Aguardando_vendedor_enviar_produto",
VENDEDOR_ENVIA_PARCIAL_PRODUTO: "Aguardando_pgto_completo",
VENDEDOR_ENVIA_TOTAL_PRODUTO: "Aguardando_pgto_produto_enviado",
}
},
Aguardando_primeiro_pgto_produto_enviado: {
on: {
COMPRADOR_NOTIFICA_PGTO_PARCIAL: "Aguardando_primeiro_pgto_produto_enviado",
COMPRADOR_NOTIFICA_PGTO_COMPLETO: "Aguardando_primeiro_pgto_produto_enviado",
COMPRADOR_DESISTE_NEGOCIO: "Cancelamento_solicitado_comprador",
VENDEDOR_CONFIRMA_PGTO_PARCIAL: "Aguardando_pgto_produto_enviado",
VENDEDOR_CONFIRMA_PGTO_COMPLETO: "Negociacao_completa",
}
},
Aguardando_pgto_produto_enviado: {
on: {
COMPRADOR_NOTIFICA_PGTO_PARCIAL: "Aguardando_pgto_produto_enviado",
COMPRADOR_NOTIFICA_PGTO_COMPLETO: "Aguardando_pgto_produto_enviado",
COMPRADOR_DESISTE_NEGOCIO: "Cancelamento_solicitado_comprador",
VENDEDOR_CONFIRMA_PGTO_PARCIAL: "Aguardando_pgto_produto_enviado",
VENDEDOR_CONFIRMA_PGTO_COMPLETO: "Negociacao_completa",
}
},
Aguardando_vendedor_enviar_produto: {
entry: ["notifica_comprador_pgto_completo"],
on:{
VENDEDOR_CONFIRMA_ENVIA_TOTAL_PRODUTO: "Negociacao_completa",
VENDEDOR_CONFIRMA_ENVIA_PARCIAL_PRODUT: "Aguardando_vendedor_enviar_produto",
}
},
Negociacao_completa: {
type: "final"
},
Cancelamento_solicitado_comprador: {
on:{
VENDEDOR_ACEITA_CANCELAMENTO_SEM_MULTA: "Cancelado",
VENDEDOR_SOLICITA_MULTA: [ { target: "Aguardando_comprador_aceitar_multa", cond: "se_contrato_tem_multa"} ]
}
},
Aguardando_comprador_aceitar_multa: {
entry : ["avisa_comprador_sobre_conflito"],
on: {
COMPRADOR_ACEITA_MULTA: "Aguarda_comprador_pagar_multa",
COMPRADOR_REJEITA_MULTA: "Conflito",
PRAZO_PARA_DECIDIR_EXPIRA: "Prazo_comprador_decidir_multa_expirado",
}
},
Prazo_comprador_decidir_multa_expirado: {
on: {
VENDEDOR_NOTIFICA_CONFLITO: "Conflito",
COMPRADOR_ACEITA_MULTA: "Aguarda_comprador_pagar_multa",
}
},
Aguarda_comprador_pagar_multa: {
on: {
COMPRADOR_INFORMA_PGTO: "Aguarda_vendedor_confirmar_recebimento_multa",
VENDEDOR_CONFIRMA_RECEBIMENTO_MULTA: "Cancelado",
VENDEDOR_NOTIFICA_CONFLITO: "Conflito",
}
},
Aguarda_vendedor_confirmar_recebimento_multa: {
on: {
COMPRADOR_INFORMA_PGTO: "Aguarda_vendedor_confirmar_recebimento_multa",
VENDEDOR_CONFIRMA_RECEBIMENTO_MULTA: "Cancelado",
VENDEDOR_NOTIFICA_CONFLITO: "Conflito",
COMPRADOR_NOTIFICA_CONFLITO: "Conflito",
}
},
Conflito : {
type: "final",
entry: "gera_relatorio_conflito"
}
}
}, {
guards: {
se_contrato_tem_multa: (context, event) => { return context.tem_multa == true},
se_soma_valores_notificados_for_igual_total_devido:(context, event) => {return true}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment