(Obrigatório)
Definição da Regra de Negócio
Através da API de busca XML por documento, os clientes do TSS poderão obter o arquivo XML do documento. A consulta será para um documento. O critério para consulta será com base nos dados de entrada. A API terá como retorno o arquivo XML codificado em base64.
O consumo da API deverá ser realizado através de mensagens JSON codificado em base64 definidas na WebService RestXMLTSS.
O processo de Deserialização de mensagens deverá ser realizado através da função FwJsonDeserialize().
Os códigos de status serão baseados no formato padrão de mensagens HTTP, conforme o link:
WebService: RestXMLTSS
WebService responsável pela definição da Interface da API de busca informações do documento.
O WebService deverá receber mensagens na estrutura JSON codificado em base64, onde serão decodificadas e passadas como parâmetro para a função RETXMLTSS().
O retorno do WebService será uma mensagem JSON.
Todos os parâmetros da mensagem serão obrigatórios.
Parâmetros:
JSon = ew0KImVtcHJlc2EiOg0KeyJFbnRpZGFkZSI6ICIwMDAwMDIifSwNCiAidGlwZG9jIjoibmZlIiwNCiAicGFyYW1ldHJvcyI6eyJkb2NpZCI6IjAwMTAwMDAwMSJ9DQp9
Mensagem JSON decodificada:
{
"empresa":
{"Entidade": "000002"},
"tipdoc":"nfe",
"parametros":{"docid":"001000001"}
}
Retorno:
Retorno Negativo:
{
"result":
{
"documento": ""
},
"error": "Estrutura do objeto inválida."
}
Retorno Positivo:
{
"status": 200, "result":"PE5GZSB4bWxucz0iaHR0cDovL3d3dy5wb3J0YWxmaXNjYWwuaW5mLmJyL25mZSI+PGluZk5GZSB2ZXJzYW89I
jMuMTAiIElkPSJORmUzNTE1MDY1MzExMzc5MTAwMDEyMjU1NzU0MDAwMDAwNTgyMTAwMjgxMTExOSI+PGlkZT48Y1VGPjM
1PC9jVUY+PGNORj4wMDI4MTExMTwvY05GPjxuYXRPcD5WRU5EQSBJQ01TPC9uYXRPcD48aW5kUGFnPjA8L2luZFBhZz48bW9kPj
U1PC9tb2Q+PHNlcmllPjc1NDwvc2VyaWU+PG5ORj41ODI8L25ORj48ZGhFbWk+MjAxNS0wNi0xMVQxOTozMjowMC0wMjowMDwvZG
hFbWk+PGRoU2FpRW50PjIwMTUtMDYtMTFUMTk6MzI6MDAtMDI6MDA8L2RoU2FpRW50Pjx0cE5GPjA8L3RwTkY+PGlkRGVzdD4y
PC9pZERlc3Q+PGNNdW5GRz4zNTUwMzA4PC9jTXVuRkc+PHRwSW1wPjE8L3RwSW1wPjx0cEVtaXM+MTwvdHBFbWlzPjxjRFY+OT
wvY0RWPjx0cEFtYj4yPC90cEFtYj48ZmluTkZlPjE8L2Zpbk5GZT48aW5kRmluYWw+MDwvaW5kRmluYWw+PGluZFByZXM+OTwvaW5
kUHJlcz48cHJvY0VtaT4wPC9wcm9jRW1pPjx2ZXJQcm9jPjIuNDc8L3ZlclByb2M+PC9pZGU+PGVtaXQ+PENOUEo+NTMxMTM3OTEwM
DAxMjI8L0NOUEo+PHhOb21lPlRPVFZTIFNBPC94Tm9tZT48eEZhbnQ+VEVTVEU8L3hGYW50PjxlbmRlckVtaXQ+PHhMZ3I+QVYuIEJ
SQVogTEVNRTwveExncj48bnJvPjE2MzE8L25ybz48eEJhaXJybz5KRC4gU0FPIEJFTlRPPC94QmFpcnJvPjxjTXVuPjM1NTAzMDg8L2NNd
W4+PHhNdW4+U0FPIFBBVUxPPC94TXVuPjxVRj5TUDwvVUY+PENFUD4wMjUxMTAwMDwvQ0VQPjxjUGFpcz4xMDU4PC9jUGFpc
z48eFBhaXM+QlJBU0lMPC94UGFpcz48Zm9uZT41NTExMzk4MTcyMDA8L2ZvbmU+PC9lbmRlckVtaXQ+PElFPjExMTAxMDk0NTExMT
wvSUU+PENSVD4zPC9DUlQ+PC9lbWl0PjxkZXN0PjxDTlBKPjY1NTc2MTQzMDAwMTkxPC9DTlBKPjx4Tm9tZT5ORi1FIEVNSVRJREE
gRU0gQU1CSUVOVEUgREUgSE9NT0xPR0FDQU8gLSBTRU0gVkFMT1IgRklTQ0FMPC94Tm9tZT48ZW5kZXJEZXN0Pjx4TGdyPlJVQS
BKT1NFIFRFSVhFSVJBIERFIEFSQVVKTzwveExncj48bnJvPjg1PC9ucm8+PHhCYWlycm8+RkxPUkFNQVI8L3hCYWlycm8+PGNNdW4+
MzEwNjIwMDwvY011bj48eE11bj5CRUxPIEhPUklaT05URTwveE11bj48VUY+TUc8L1VGPjxDRVA+MzE3NDIxMzg8L0NFUD48Y1BhaX
M+MTA1ODwvY1BhaXM+PHhQYWlzPkJSQVNJTDwveFBhaXM+PGZvbmU+MzE4NjgyNTY4NjwvZm9uZT48L2VuZGVyRGVzdD48aW
5kSUVEZXN0PjI8L2luZElFRGVzdD48L2Rlc3Q+PGRldCBuSXRlbT0iMSI+PHByb2Q+PGNQcm9kPlAwMDFfSVNJUzwvY1Byb2Q+PGNF
QU4+PC9jRUFOPjx4UHJvZD5QUk9EVVRPIEFDQUJBRE8gSVNJUyBQSVMgQ09GSU48L3hQcm9kPjxOQ00+MDEwMTEwOTA8L05DT
T48Q0ZPUD4yNDAzPC9DRk9QPjx1Q29tPlBDPC91Q29tPjxxQ29tPjEuMDAwMDwvcUNvbT48dlVuQ29tPjUwLjAwMDAwMDAwPC92VW
5Db20+PHZQcm9kPjUwLjAwPC92UHJvZD48Y0VBTlRyaWI+PC9jRUFOVHJpYj48dVRyaWI+UEM8L3VUcmliPjxxVHJpYj4xLjAwMDA8
L3FUcmliPjx2VW5UcmliPjUwLjAwMDAwMDAwPC92VW5UcmliPjx2T3V0cm8+MTAuNzA8L3ZPdXRybz48aW5kVG90PjE8L2luZFRvdD
48L3Byb2Q+PGltcG9zdG8+PElDTVM+PElDTVMwMD48b3JpZz4wPC9vcmlnPjxDU1Q+MDA8L0NTVD48bW9kQkM+MzwvbW9kQkM+P
HZCQz41MC4wMDwvdkJDPjxwSUNNUz4xMi4wMDAwPC9wSUNNUz48dklDTVM+Ni4wMDwvdklDTVM+PC9JQ01TMDA+PC9JQ01TP
jxJUEk+PGNFbnE+OTk5PC9jRW5xPjxJUElUcmliPjxDU1Q+NTA8L0NTVD48dkJDPjUwLjAwPC92QkM+PHBJUEk+Ny4wMDAwPC9wSV
BJPjx2SVBJPjMuNTA8L3ZJUEk+PC9JUElUcmliPjwvSVBJPjxQSVM+PFBJU05UPjxDU1Q+MDU8L0NTVD48L1BJU05UPjwvUElTPjxQS
VNTVD48dkJDPjUzLjUwPC92QkM+PHBQSVM+MTAuMDAwMDwvcFBJUz48dlBJUz41LjM1PC92UElTPjwvUElTU1Q+PENPRklOUz48
Q09GSU5TTlQ+PENTVD4wNTwvQ1NUPjwvQ09GSU5TTlQ+PC9DT0ZJTlM+PENPRklOU1NUPjx2QkM+NTMuNTA8L3ZCQz48cENPRk
lOUz4xMC4wMDAwPC9wQ09GSU5TPjx2Q09GSU5TPjUuMzU8L3ZDT0ZJTlM+PC9DT0ZJTlNTVD48L2ltcG9zdG8+PC9kZXQ+PHRvdGF
sPjxJQ01TVG90Pjx2QkM+NTAuMDA8L3ZCQz48dklDTVM+Ni4wMDwvdklDTVM+PHZJQ01TRGVzb24+MDwvdklDTVNEZXNvbj48dkJD
U1Q+MDwvdkJDU1Q+PHZTVD4wPC92U1Q+PHZQcm9kPjUwLjAwPC92UHJvZD48dkZyZXRlPjA8L3ZGcmV0ZT48dlNlZz4wPC92U2VnP
jx2RGVzYz4wPC92RGVzYz48dklJPjA8L3ZJST48dklQST4zLjUwPC92SVBJPjx2UElTPjA8L3ZQSVM+PHZDT0ZJTlM+MDwvdkNPRklOUz
48dk91dHJvPjEwLjcwPC92T3V0cm8+PHZORj42NC4yMDwvdk5GPjwvSUNNU1RvdD48L3RvdGFsPjx0cmFuc3A+PG1vZEZyZXRlPjE8L21
vZEZyZXRlPjwvdHJhbnNwPjxjb2JyPjxkdXA+PG5EdXA+NzU0MDAwNTgyPC9uRHVwPjxkVmVuYz4yMDE1LTA2LTExPC9kVmVuYz48
dkR1cD42NC4yMDwvdkR1cD48L2R1cD48L2NvYnI+PC9pbmZORmU+PC9ORmU+" ,
"error": null
}
Função: RETXMLTSS()
Função responsável pela definição da Interface da API retorna xml por documento.
A função RetXmlTss definirá a estrutura da API. A função deverá ser definida em um fonte.prw definido com o mesmo nome da função.
A função RetXmlTss deverá ser implementada apenas como função de interface para a API. Deverá ser totalmente desacoplada de qualquer definição de instrução de processamento, devendo apenas realizar as devidas validações das mensagens. Todo o processamento deverá estar definido em funções auxiliares.
A função RetXmlTss () deverá receber mensagens na estrutura JSON, onde serão convertidas em objeto pela função fwJsonDeserialize().
Caso não haja erro na deserialização de JSON para objeto, será chamada a rotina GetXml(), passando como parâmetro o objeto.
A função GetXml () retornará uma string, contendo o XML codificado em base64. Essa string será passada como parâmetro na chamada da função getJSONResp() junto com o código de status e mensagem de erro (caso exista). O retorno da função getJSONResp() é a mensagem já na estrutura JSON.
Todos os parâmetros da mensagem serão obrigatórios.
A rotina RetXmlTss() será finalizada e como retorno será passado a mensagem na estrutura JSON.
Parâmetros:
cJsonRequest =
{
"empresa":
{"Entidade": "000002"},
"tipdoc":"nfe",
"parametros":{"docid":"001000001"}
}
Retorno:
Retorno Negativo:
{
"result":
{
"documento": ""
},
"error": "Estrutura do objeto inválida."
}
Retorno Positivo:
{
"status": 200, "result":"PE5GZSB4bWxucz0iaHR0cDovL3d3dy5wb3J0YWxmaXNjYWwuaW5mLmJyL25mZSI+PGluZk5GZSB2ZXJzYW89I
jMuMTAiIElkPSJORmUzNTE1MDY1MzExMzc5MTAwMDEyMjU1NzU0MDAwMDAwNTgyMTAwMjgxMTExOSI+PGlkZT48Y1VGPjM
1PC9jVUY+PGNORj4wMDI4MTExMTwvY05GPjxuYXRPcD5WRU5EQSBJQ01TPC9uYXRPcD48aW5kUGFnPjA8L2luZFBhZz48bW9kPj
U1PC9tb2Q+PHNlcmllPjc1NDwvc2VyaWU+PG5ORj41ODI8L25ORj48ZGhFbWk+MjAxNS0wNi0xMVQxOTozMjowMC0wMjowMDwvZG
hFbWk+PGRoU2FpRW50PjIwMTUtMDYtMTFUMTk6MzI6MDAtMDI6MDA8L2RoU2FpRW50Pjx0cE5GPjA8L3RwTkY+PGlkRGVzdD4y
PC9pZERlc3Q+PGNNdW5GRz4zNTUwMzA4PC9jTXVuRkc+PHRwSW1wPjE8L3RwSW1wPjx0cEVtaXM+MTwvdHBFbWlzPjxjRFY+OT
wvY0RWPjx0cEFtYj4yPC90cEFtYj48ZmluTkZlPjE8L2Zpbk5GZT48aW5kRmluYWw+MDwvaW5kRmluYWw+PGluZFByZXM+OTwvaW5
kUHJlcz48cHJvY0VtaT4wPC9wcm9jRW1pPjx2ZXJQcm9jPjIuNDc8L3ZlclByb2M+PC9pZGU+PGVtaXQ+PENOUEo+NTMxMTM3OTEwM
DAxMjI8L0NOUEo+PHhOb21lPlRPVFZTIFNBPC94Tm9tZT48eEZhbnQ+VEVTVEU8L3hGYW50PjxlbmRlckVtaXQ+PHhMZ3I+QVYuIEJ
SQVogTEVNRTwveExncj48bnJvPjE2MzE8L25ybz48eEJhaXJybz5KRC4gU0FPIEJFTlRPPC94QmFpcnJvPjxjTXVuPjM1NTAzMDg8L2NNd
W4+PHhNdW4+U0FPIFBBVUxPPC94TXVuPjxVRj5TUDwvVUY+PENFUD4wMjUxMTAwMDwvQ0VQPjxjUGFpcz4xMDU4PC9jUGFpc
z48eFBhaXM+QlJBU0lMPC94UGFpcz48Zm9uZT41NTExMzk4MTcyMDA8L2ZvbmU+PC9lbmRlckVtaXQ+PElFPjExMTAxMDk0NTExMT
wvSUU+PENSVD4zPC9DUlQ+PC9lbWl0PjxkZXN0PjxDTlBKPjY1NTc2MTQzMDAwMTkxPC9DTlBKPjx4Tm9tZT5ORi1FIEVNSVRJREE
gRU0gQU1CSUVOVEUgREUgSE9NT0xPR0FDQU8gLSBTRU0gVkFMT1IgRklTQ0FMPC94Tm9tZT48ZW5kZXJEZXN0Pjx4TGdyPlJVQS
BKT1NFIFRFSVhFSVJBIERFIEFSQVVKTzwveExncj48bnJvPjg1PC9ucm8+PHhCYWlycm8+RkxPUkFNQVI8L3hCYWlycm8+PGNNdW4+
MzEwNjIwMDwvY011bj48eE11bj5CRUxPIEhPUklaT05URTwveE11bj48VUY+TUc8L1VGPjxDRVA+MzE3NDIxMzg8L0NFUD48Y1BhaX
M+MTA1ODwvY1BhaXM+PHhQYWlzPkJSQVNJTDwveFBhaXM+PGZvbmU+MzE4NjgyNTY4NjwvZm9uZT48L2VuZGVyRGVzdD48aW
5kSUVEZXN0PjI8L2luZElFRGVzdD48L2Rlc3Q+PGRldCBuSXRlbT0iMSI+PHByb2Q+PGNQcm9kPlAwMDFfSVNJUzwvY1Byb2Q+PGNF
QU4+PC9jRUFOPjx4UHJvZD5QUk9EVVRPIEFDQUJBRE8gSVNJUyBQSVMgQ09GSU48L3hQcm9kPjxOQ00+MDEwMTEwOTA8L05DT
T48Q0ZPUD4yNDAzPC9DRk9QPjx1Q29tPlBDPC91Q29tPjxxQ29tPjEuMDAwMDwvcUNvbT48dlVuQ29tPjUwLjAwMDAwMDAwPC92VW
5Db20+PHZQcm9kPjUwLjAwPC92UHJvZD48Y0VBTlRyaWI+PC9jRUFOVHJpYj48dVRyaWI+UEM8L3VUcmliPjxxVHJpYj4xLjAwMDA8
L3FUcmliPjx2VW5UcmliPjUwLjAwMDAwMDAwPC92VW5UcmliPjx2T3V0cm8+MTAuNzA8L3ZPdXRybz48aW5kVG90PjE8L2luZFRvdD
48L3Byb2Q+PGltcG9zdG8+PElDTVM+PElDTVMwMD48b3JpZz4wPC9vcmlnPjxDU1Q+MDA8L0NTVD48bW9kQkM+MzwvbW9kQkM+P
HZCQz41MC4wMDwvdkJDPjxwSUNNUz4xMi4wMDAwPC9wSUNNUz48dklDTVM+Ni4wMDwvdklDTVM+PC9JQ01TMDA+PC9JQ01TP
jxJUEk+PGNFbnE+OTk5PC9jRW5xPjxJUElUcmliPjxDU1Q+NTA8L0NTVD48dkJDPjUwLjAwPC92QkM+PHBJUEk+Ny4wMDAwPC9wSV
BJPjx2SVBJPjMuNTA8L3ZJUEk+PC9JUElUcmliPjwvSVBJPjxQSVM+PFBJU05UPjxDU1Q+MDU8L0NTVD48L1BJU05UPjwvUElTPjxQS
VNTVD48dkJDPjUzLjUwPC92QkM+PHBQSVM+MTAuMDAwMDwvcFBJUz48dlBJUz41LjM1PC92UElTPjwvUElTU1Q+PENPRklOUz48
Q09GSU5TTlQ+PENTVD4wNTwvQ1NUPjwvQ09GSU5TTlQ+PC9DT0ZJTlM+PENPRklOU1NUPjx2QkM+NTMuNTA8L3ZCQz48cENPRk
lOUz4xMC4wMDAwPC9wQ09GSU5TPjx2Q09GSU5TPjUuMzU8L3ZDT0ZJTlM+PC9DT0ZJTlNTVD48L2ltcG9zdG8+PC9kZXQ+PHRvdGF
sPjxJQ01TVG90Pjx2QkM+NTAuMDA8L3ZCQz48dklDTVM+Ni4wMDwvdklDTVM+PHZJQ01TRGVzb24+MDwvdklDTVNEZXNvbj48dkJD
U1Q+MDwvdkJDU1Q+PHZTVD4wPC92U1Q+PHZQcm9kPjUwLjAwPC92UHJvZD48dkZyZXRlPjA8L3ZGcmV0ZT48dlNlZz4wPC92U2VnP
jx2RGVzYz4wPC92RGVzYz48dklJPjA8L3ZJST48dklQST4zLjUwPC92SVBJPjx2UElTPjA8L3ZQSVM+PHZDT0ZJTlM+MDwvdkNPRklOUz
48dk91dHJvPjEwLjcwPC92T3V0cm8+PHZORj42NC4yMDwvdk5GPjwvSUNNU1RvdD48L3RvdGFsPjx0cmFuc3A+PG1vZEZyZXRlPjE8L21
vZEZyZXRlPjwvdHJhbnNwPjxjb2JyPjxkdXA+PG5EdXA+NzU0MDAwNTgyPC9uRHVwPjxkVmVuYz4yMDE1LTA2LTExPC9kVmVuYz48
dkR1cD42NC4yMDwvdkR1cD48L2R1cD48L2NvYnI+PC9pbmZORmU+PC9ORmU+" ,
"error": null
}
Função: GetXml()
A função GetXml() receberá como parâmetro o objeto da requisição, validará todos os campos quanto a obrigatoriedade, tamanho e tipo de dados. Se algum dado estiver inconsistente, deverá retorna a mensagem de validação correspondente informando.
Os dados contidos no objeto recebido como parâmetro, serão validados afim de identificar quais foram preenchidos, todos os campos são necessários para o retorno.
A função validará o tipo de documento, afim de identificar se é válida, esta informação estará contida dentro do objeto recebido como parâmetro.
Com as informações tipo de documento e número da entidade, será chamada a função RetXml(), para essa função serão passados como parâmetros: o número da entidade do cliente, o tipo de documento, número do documento e série do documento. O retorno desta função será uma mensagem string contendo o XML do documento codificado em base 64.
Após obter o retorno da rotina RetXml(), a função GetXml() será encerrada, retornando a string contendo o código xml em base64.
Parâmetros:
GetXml(oDados,cError,cHttpStatus)
oDados – Objeto contendo as informações da requisição: entidade, número do documento, série do documento, tipo de documento.
cError – Mensagem de erro, caso exista.
Retorno:
cXml – String contendo o XML codificado em base 64
Função: RetXml()
A função RetXml() receberá como parâmetro, a entidade do cliente, o tipo de documento, Nfe_Id, mensagem de erro(caso exista) e código do status, processará os dados afim de obter a mensagem XML.
A função verificará qual o tipo de documento, afim de identificar qual tabela irá buscar o XML.
A função por meio de Query, localizará o documento na tabela correspondente, obtendo informação do campo XML_ERP, essa informação string, será convertida em base64, que será o retorno da função.
Parâmetros:
(cEnt,cTipo,cDoc,cError)
cEnt – Código da entidade do cliente.
cTipo – Tipo de documento: ‘NFE’;’NFSE’, etc.
cDoc – Nfe_Id // Série + número do documento
cError – Mensagem de erro, caso exista.
Retorno:
cRet – String contendo o XML codificado em base64
Função: GetJSONResp()
A rotina consiste em obter os dados de entrada e gerar a mensagem em estrutura JSON.
A rotina retornará uma string na estrutura JSON
Parâmetros:
cHttpStatus – Código do Status.
aArray– Array multidimensional.
cError – Mensagem de erro.
Retorno:
cJSONResponse – String na estrutura JSON.