readResponse(context)
To access the LATAM E-Document Certification SuiteApp documentation in Brazilian Portuguese (Português do Brasil), see LATAM E-Document Certification.
Function Declaration |
|
Type |
Interface function |
Description |
Reads the response provided by the tax authority’s web service and extracts the information required for processing the response in NetSuite. Each tax authority defines its own XML schema and tag standards for its e-document templates and responses. You should adapt the code to the tax authority’s particularities to enable NetSuite to read the information from the response. |
Returns |
|
Input Parameters |
Example
function readResponse(context) {
var requestType = context.requestParameters.requestType;
if (!requestType) {
var operationTypeExternalId = context.operationTypeExternalId;
if (operationTypeExternalId === "Send E-Document") {
requestType = "RecepcionarLoteRpsRequest";
}
if (operationTypeExternalId === "Cancel") {
requestType = "CancelarNfseRequest";
}
}
var xmlParse = parseXml(context.response.body);
var success = false;
var responseContents = xml.XPath.select({
node: xmlParse,
xpath: '//return'
})[0].textContent;
var responseParsedXml = parseXml(responseContents);
var originalParsedXml = parseXml(context.eDocContent);
var details = null;
var certificationProtocol = "";
var messageCode = "";
var message = "";
var fixMessage = "";
var certificationDate = null;
var documentSeries = "";
var transitoryDocumentNumber = "";
var certifiedDocumentNumber = "";
var accessKey = "";
var subsidiaryCnpj = "";
var subsidiaryInscricaoMunicipal = "";
switch(requestType) {
case "RecepcionarLoteRpsRequest": {
certificationProtocol = taxAuthLib.getFirstElementByTagName(responseParsedXml, 'ns3:Protocolo');
messageCode = taxAuthLib.getElementByXpath(responseParsedXml, "//*[contains(name(), ':MensagemRetorno')]//*[contains(name(), ':Codigo')]");
message = taxAuthLib.getElementByXpath(responseParsedXml, "//*[contains(name(), ':MensagemRetorno')]//*[contains(name(), ':Mensagem')]");
fixMessage = taxAuthLib.getElementByXpath(responseParsedXml, "//*[contains(name(), ':MensagemRetorno')]//*[contains(name(), ':Correcao')]");
message = taxAuthLib.formatErrorMessage(message, messageCode, fixMessage);
subsidiaryCnpj = taxAuthLib.getFirstElementByTagName(originalParsedXml, 'Cnpj');
subsidiaryInscricaoMunicipal = taxAuthLib.getFirstElementByTagName(originalParsedXml, 'InscricaoMunicipal');
if (checkSuccessRecepcionarLote(messageCode, certificationProtocol)) {
success = true;
details = {
subsidiaryCnpj: subsidiaryCnpj,
subsidiaryInscricaoMunicipal: subsidiaryInscricaoMunicipal,
certificationProtocol: certificationProtocol
};
} else {
details = {
messageCode: messageCode
};
}
break;
}
case "ConsultarLoteRpsRequest": {
messageCode = taxAuthLib.getElementByXpath(responseParsedXml, "//*[contains(name(), ':MensagemRetorno')]//*[contains(name(), ':Codigo')]");
message = taxAuthLib.getElementByXpath(responseParsedXml, "//*[contains(name(), ':MensagemRetorno')]//*[contains(name(), ':Mensagem')]");
fixMessage = taxAuthLib.getElementByXpath(responseParsedXml, "//*[contains(name(), ':MensagemRetorno')]//*[contains(name(), ':Correcao')]");
message = taxAuthLib.formatErrorMessage(message, messageCode, fixMessage);
var certificationDateString = taxAuthLib.getFirstElementByTagName(responseParsedXml, 'ns4:DataEmissao');
if (errorCodeToReprocess(messageCode)) {
success = true;
details = {
messageCode: messageCode,
subsidiaryCnpj: context.requestParameters.subsidiaryCnpj,
subsidiaryInscricaoMunicipal: context.requestParameters.subsidiaryInscricaoMunicipal,
certificationProtocol: context.requestParameters.certificationProtocol
};
} else if (checkSuccessConsultarLote(messageCode, certificationDateString)) {
documentSeries = taxAuthLib.getElementByXpath(responseParsedXml, "//*[name()='ns4:IdentificacaoRps']//*[name()='ns4:Serie']");
transitoryDocumentNumber = taxAuthLib.getElementByXpath(responseParsedXml, "//*[name()='ns4:IdentificacaoRps']//*[name()='ns4:Numero']");
certificationDate = taxAuthLib.parseISODatetime(certificationDateString);
certifiedDocumentNumber = taxAuthLib.getElementByXpath(responseParsedXml, "//*[name()='ns4:InfNfse']//*[name()='ns4:Numero']");
accessKey = taxAuthLib.getElementByXpath(responseParsedXml, "//*[name()='ns4:InfNfse']//*[name()='ns4:CodigoVerificacao']");
success = true;
details = {
certificationDate: certificationDate,
documentSeries: documentSeries,
transitoryDocumentNumber: transitoryDocumentNumber,
certifiedDocumentNumber: certifiedDocumentNumber,
documentAccessKey: accessKey,
additionalInformation: {
certificationDateString: certificationDateString
}
};
} else {
success = false;
details = {
messageCode: messageCode
}
}
break;
}
case "CancelarNfseRequest": {
messageCode = taxAuthLib.getElementByXpath(responseParsedXml, "//*[contains(name(), ':MensagemRetorno')]//*[contains(name(), ':Codigo')]");
message = taxAuthLib.getElementByXpath(responseParsedXml, "//*[contains(name(), ':MensagemRetorno')]//*[contains(name(), ':Mensagem')]");
fixMessage = taxAuthLib.getElementByXpath(responseParsedXml, "//*[contains(name(), ':MensagemRetorno')]//*[contains(name(), ':Correcao')]");
message = taxAuthLib.formatErrorMessage(message, messageCode, fixMessage);
if (checkSuccessCancelarNfse(messageCode)) {
certifiedDocumentNumber = taxAuthLib.getFirstElementByTagName(responseParsedXml, 'ns5:Numero') || taxAuthLib.getFirstElementByTagName(originalParsedXml, 'tns:NumeroNfse');
var certificationDateString = taxAuthLib.getFirstElementByTagName(responseParsedXml, 'ns5:DataHora');
certificationDate = taxAuthLib.parseISODatetime(certificationDateString);
success = true;
details = {
certificationDate: certificationDate,
certifiedDocumentNumber: certifiedDocumentNumber,
additionalInformation: {
certificationDateString: certificationDateString
}
};
} else {
details = {
messageCode: messageCode
};
}
break;
}
}
return {
success: success,
message: message,
contents: responseContents,
details: details
};
};