use anyhow::*;
pub fn nfe_status_servico<'a>(
ambiente: u8,
uf: &'a str,
modelo: u32,
svn: bool,
) -> Result<&'a str> {
let url = url("NfeStatusServico", ambiente, uf, modelo, svn);
Ok(url.unwrap())
}
pub fn nfe_autorizacao<'a>(ambiente: u8, uf: &'a str, modelo: u32, svn: bool) -> Result<&'a str> {
let url = url("NFeAutorizacao", ambiente, uf, modelo, svn);
Ok(url.unwrap())
}
pub fn nfe_recepcao_evento<'a>(
ambiente: u8,
uf: &'a str,
modelo: u32,
svn: bool,
) -> Result<&'a str> {
let url = url("RecepcaoEvento", ambiente, uf, modelo, svn);
Ok(url.unwrap())
}
fn url<'a>(service: &'a str, ambiente: u8, uf: &'a str, modelo: u32, svn: bool) -> Result<&'a str> {
if modelo != 55 && modelo != 65 {
return Err(anyhow!("Modelo inválido"));
}
if modelo == 65 {
let url = match (service, ambiente, uf) {
("NFeAutorizacao", 1, "SP") => "https://nfce.fazenda.sp.gov.br/ws/NFeAutorizacao4.asmx",
("NFeRetAutorizacao", 1, "SP") => {
"https://nfce.fazenda.sp.gov.br/ws/NFeRetAutorizacao4.asmx"
}
("NfeInutilizacao", 1, "SP") => {
"https://nfce.fazenda.sp.gov.br/ws/NFeInutilizacao4.asmx"
}
("NfeConsultaProtocolo", 1, "SP") => {
"https://nfce.fazenda.sp.gov.br/ws/NFeConsultaProtocolo4.asmx"
}
("RecepcaoEvento", 1, "SP") => {
"https://nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx"
}
("NfeStatusServico", 1, "SP") => {
"https://nfce.fazenda.sp.gov.br/ws/NFeStatusServico4.asmx"
}
("NFeAutorizacao", 2, "SP") => {
"https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeAutorizacao4.asmx"
}
("NFeRetAutorizacao", 2, "SP") => {
"https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeRetAutorizacao4.asmx"
}
("NfeInutilizacao", 2, "SP") => {
"https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeInutilizacao4.asmx"
}
("NfeConsultaProtocolo", 2, "SP") => {
"https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeConsultaProtocolo4.asmx"
}
("RecepcaoEvento", 2, "SP") => {
"https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx"
}
("NfeStatusServico", 2, "SP") => {
"https://homologacao.nfce.fazenda.sp.gov.br/ws/NFeStatusServico4.asmx"
}
_ => return Err(anyhow!("Service endpoint (NFCE) not found")),
};
return Ok(url);
}
let url = match (service, ambiente, uf, svn) {
("NfeInutilizacao", 1, "SP", false) => {
"https://nfe.fazenda.sp.gov.br/ws/nfeinutilizacao4.asmx"
}
("NfeConsultaProtocolo", 1, "SP", false) => {
"https://nfe.fazenda.sp.gov.br/ws/nfeconsultaprotocolo4.asmx"
}
("NfeStatusServico", 1, "SP", false) => {
"https://nfe.fazenda.sp.gov.br/ws/nfestatusservico4.asmx"
}
("NfeConsultaCadastro", 1, "SP", false) => {
"https://nfe.fazenda.sp.gov.br/ws/cadconsultacadastro4.asmx"
}
("RecepcaoEvento", 1, "SP", false) => {
"https://nfe.fazenda.sp.gov.br/ws/nferecepcaoevento4.asmx"
}
("NFeAutorizacao", 1, "SP", false) => {
"https://nfe.fazenda.sp.gov.br/ws/nfeautorizacao4.asmx"
}
("NFeRetAutorizacao", 1, "SP", false) => {
"https://nfe.fazenda.sp.gov.br/ws/nferetautorizacao4.asmx"
}
("NfeInutilizacao", 2, "SP", false) => {
"https://homologacao.nfe.fazenda.sp.gov.br/ws/nfeinutilizacao4.asmx"
}
("NfeConsultaProtocolo", 2, "SP", false) => {
"https://homologacao.nfe.fazenda.sp.gov.br/ws/nfeconsultaprotocolo4.asmx"
}
("NfeStatusServico", 2, "SP", false) => {
"https://homologacao.nfe.fazenda.sp.gov.br/ws/nfestatusservico4.asmx"
}
("NfeConsultaCadastro", 2, "SP", false) => {
"https://homologacao.nfe.fazenda.sp.gov.br/ws/cadconsultacadastro4.asmx"
}
("RecepcaoEvento", 2, "SP", false) => {
"https://homologacao.nfe.fazenda.sp.gov.br/ws/nferecepcaoevento4.asmx"
}
("NFeAutorizacao", 2, "SP", false) => {
"https://homologacao.nfe.fazenda.sp.gov.br/ws/nfeautorizacao4.asmx"
}
("NFeRetAutorizacao", 2, "SP", false) => {
"https://homologacao.nfe.fazenda.sp.gov.br/ws/nferetautorizacao4.asmx"
}
("NfeConsultaProtocolo", 1, "SP", true) => {
"https://www.svc.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx"
}
("NfeStatusServico", 1, "SP", true) => {
"https://www.svc.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx"
}
("RecepcaoEvento", 1, "SP", true) => {
"https://www.svc.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"
}
("NFeAutorizacao", 1, "SP", true) => {
"https://www.svc.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx"
}
("NFeRetAutorizacao", 1, "SP", true) => {
"https://www.svc.fazenda.gov.br/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx"
}
("NfeConsultaProtocolo", 2, "SP", true) => {
"https://hom.svc.fazenda.gov.br/NFeConsultaProtocolo4/NFeConsultaProtocolo4.asmx"
}
("NfeStatusServico", 2, "SP", true) => {
"https://hom.svc.fazenda.gov.br/NFeStatusServico4/NFeStatusServico4.asmx"
}
("RecepcaoEvento", 2, "SP", true) => {
"https://hom.svc.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"
}
("NFeAutorizacao", 2, "SP", true) => {
"https://hom.svc.fazenda.gov.br/NFeAutorizacao4/NFeAutorizacao4.asmx"
}
("NFeRetAutorizacao", 2, "SP", true) => {
"https://hom.svc.fazenda.gov.br/NFeRetAutorizacao4/NFeRetAutorizacao4.asmx"
}
_ => {
return Err(anyhow!("Service endpoint not found"));
}
};
Ok(url)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_ws_url() {
let url = url("NfeStatusServico", 2, "SP", 55, false);
println!("URL: {:?}", url);
assert_eq!(
url.unwrap(),
"https://homologacao.nfe.fazenda.sp.gov.br/ws/nfestatusservico4.asmx"
);
}
}