-
Posts
734 -
Joined
-
Last visited
brunotoira's Achievements
-
Utilizar Webservices da AT
brunotoira replied to cjulio's topic in Software de Contabilidade, Finanças e Admin. Pública
Upgrade ao .net framework deve resolver... nao consigo testar nao tenho nenhum vista para testar -
Utilizar Webservices da AT
brunotoira replied to cjulio's topic in Software de Contabilidade, Finanças e Admin. Pública
Quem tem VB ou C#, a solução passa por converter o projeto para .net framework 4.0 OU SUPERIOR. basta isso. deverá assumir automaticamente o TLS1.2 caso nao assuma, usar: ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 -
Utilizar Webservices da AT
brunotoira replied to cjulio's topic in Software de Contabilidade, Finanças e Admin. Pública
Desculpem a minha ausência. Finalmente já está a funcionar Têm que manter tudo, no DocumentNumber, deverá ser "GT SERIE/NUMDOC" Logo de seguida, no ATCUD, devem colocar "ATCUD-NUMDOC" previamente comunicada a série (neste caso) L001 <doc:envioDocumentoTransporteRequestElem> <TaxRegistrationNumber>502931xxx</TaxRegistrationNumber> <CompanyName>ARMAZÉM GERAL</CompanyName> <CompanyAddress> <Addressdetail>R.XPTO</Addressdetail> <City>Porto</City> <PostalCode>4250-111</PostalCode> <Country>PT</Country> </CompanyAddress> <DocumentNumber>GT L001/100155060</DocumentNumber> <ATCUD>JFF2XMG2-100155060</ATCUD> <MovementStatus>N</MovementStatus> <MovementDate>2023-05-29</MovementDate> <MovementType>GT</MovementType> <CustomerTaxID>502931xxx</CustomerTaxID> <CustomerAddress> <Addressdetail>Rua Testes</Addressdetail> <City>Porto</City> <PostalCode>4100-001</PostalCode> <Country>PT</Country> </CustomerAddress> <CustomerName>Loja Testes</CustomerName> <AddressTo> <Addressdetail>Rua Testes</Addressdetail> <City>Porto</City> <PostalCode>4100-001</PostalCode> <Country>PT</Country> </AddressTo> <AddressFrom> <Addressdetail>R.XPTO</Addressdetail> <City>Porto</City> <PostalCode>4250-397</PostalCode> <Country>PT</Country> </AddressFrom> <MovementStartTime>2023-05-29T16:05:24</MovementStartTime> <VehicleID>Nosso carro</VehicleID> <Line> <ProductDescription>teste</ProductDescription> <Quantity>1.00</Quantity> <UnitOfMeasure>UN</UnitOfMeasure> <UnitPrice>0.00</UnitPrice> </Line> </doc:envioDocumentoTransporteRequestElem> <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header> <WorkContext xmlns="http://oracle.com/weblogic/soap/workarea/">rO0ABXdQABN3ZWJsb2dpYy5hcHAuc2dkdHdzAAAA1gAAACN3ZWJsb2dpYy53b3JrYXJlYS5TdHJpbmdXb3JrQ29udGV4dAAMMS4yMi43LTQ1NDYyAAA=</WorkContext> </S:Header> <S:Body><ns0:envioDocumentoTransporteResponseElem xmlns:ns0="https://servicos.portaldasfinancas.gov.pt/sgdtws/documentosTransporte/"> <ResponseStatus><ReturnCode>0</ReturnCode><ReturnMessage>OK</ReturnMessage> </ResponseStatus><DocumentNumber>GT L001/100155060</DocumentNumber> <ATCUD>JFF2XMG2-100155060</ATCUD> <ATDocCodeID>14002792176</ATDocCodeID> </ns0:envioDocumentoTransporteResponseElem></S:Body></S:Envelope> -
Utilizar Webservices da AT
brunotoira replied to cjulio's topic in Software de Contabilidade, Finanças e Admin. Pública
FINALMENTE Acabei de conseguir implementar em .net, C#, e Delphi (concluí agora em PHP) <?xml version='1.0' encoding='utf-8' ?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:doc="https://servicos.portaldasfinancas.gov.pt/seriesWSService/"> <S:Header> <wss:Security xmlns:wss="http://schemas.xmlsoap.org/ws/2002/12/secext"> <wss:UsernameToken> <wss:Username>599999993/37</wss:Username> <wss:Password>pSxLVFigJzNZjHIJeaVwAA==</wss:Password> <wss:Nonce>O1bHcfgjqIJ9BGXXCdqzPdmnHp7l9EIr/6nUeWMZ9QfYlWluSqxX2cMNnRJII+J6PBAesY/TT1Fouj0p+UNEHXgrx5Qq/GQqpie3ca9VUdImsolzjP7Y9/Ig2YF45LwIHKkeaxCzA+IHOz2UMAl17Lh1yenf1OP/FouWEVqeFLHzyzxk1r5nD//Mg4hnFcDWqqotJV6XAFy+n714xtWFLiykGH6APe8+XhoHEMdJu3/BflZRVwm7TelQ4KjR7pZVH29/6o/hE7mrEdJPrRB3eXnzEmnfenDq6i7kaIwGQxF4yYMJWdQo7oxz5UpXf5uXpVLuqZvu/pSqX5G9332Hdw==</wss:Nonce> <wss:Created>+A+WuGFhuPvST2wi6zzb0pwiOyHjJFZYzFmqYjy+Wrc=</wss:Created> </wss:UsernameToken> </wss:Security> </S:Header> <S:Body> <ns0:registarSerie xmlns:ns0="http://at.gov.pt/"> <serie>L001</serie> 'identificação serie' <tipoSerie>N</tipoSerie> 'tipo serie N normal, f -Formação , R Recuperação' <classeDoc>SI</classeDoc> 'Classe é SI -> faturas e NC, MG se for Guias e PY se for recibos' <tipoDoc>FT</tipoDoc> 'FT, FS, FR, NC, ND, GR, GT, etc' <numInicialSeq>888000003</numInicialSeq> numero inicial da serie <dataInicioPrevUtiliz>2022-10-25</dataInicioPrevUtiliz> 'quando começa' <numCertSWFatur>1955</numCertSWFatur> numero do tue certificado da AT <meioProcessamento>PI</meioProcessamento> PI - Programa Informatico, PF portal das finanças - OM outros meios </ns0:registarSerie> </S:Body> </S:Envelope> Se tiverem problemas , avisem Exemplo Resposta: <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header><WorkContext xmlns="http://oracle.com/weblogic/soap/workarea/">rO0ABXdWABV3ZWJsb2dpYy5hcHAuc2VyaWVzYm8AAADWAAAAI3dlYmxvZ2ljLndvcmthcmVhLlN0cmluZ1dvcmtDb250ZXh0ABAyMDIyMTAyNDEyMzMyOS4wAAA=</WorkContext> </S:Header><S:Body><ns0:registarSerieResponse xmlns:ns0="http://at.gov.pt/"> <registarSerieResp> <infoSerie> <serie>AXXA</serie> <tipoSerie>N</tipoSerie> <classeDoc>SI</classeDoc> <tipoDoc>NC</tipoDoc> <numInicialSeq>222000</numInicialSeq> <dataInicioPrevUtiliz>2023-01-01</dataInicioPrevUtiliz> <meioProcessamento>PF</meioProcessamento> <numCertSWFatur>288</numCertSWFatur> <codValidacaoSerie>AAJFFNHC2W</codValidacaoSerie> <dataRegisto>2022-10-25</dataRegisto> <estado>A</estado> <dataEstado>2022-10-25T10:43:49+01:00</dataEstado> <nifComunicou>599999993</nifComunicou> </infoSerie> <infoResultOper> <codResultOper>2001</codResultOper> <msgResultOper>Série registada com sucesso. A situação ficou ativa e foi atribuído o seguinte código de validação : AAJFFNHC2W</msgResultOper> </infoResultOper> </registarSerieResp> </ns0:registarSerieResponse> </S:Body> </S:Envelope> -
Utilizar Webservices da AT
brunotoira replied to cjulio's topic in Software de Contabilidade, Finanças e Admin. Pública
https://prtsyncn64.com/guias/php.7z esganei-me queres em C# é? -
AT - questões legais
brunotoira replied to marcolopes's topic in Software de Contabilidade, Finanças e Admin. Pública
os meus criticos.... ah os meus criticos... Falar é facil, fazer e partilhar é que é fudydo. No comment's -
Utilizar Webservices da AT
brunotoira replied to cjulio's topic in Software de Contabilidade, Finanças e Admin. Pública
Ora boas tardes a todos. Andei fugido, eu sei, nao tenho tido tempo para debitar letras aqui no fórum, e o gasóleo tb tá caro para vir até aqui 🙂 Ora, CURL: https://prtsyncn64.com/public_html/guias/php.7z beijos -
AT - questões legais
brunotoira replied to marcolopes's topic in Software de Contabilidade, Finanças e Admin. Pública
isto é a base para se adaptar nas vossas aplicações. Isto até é de uma aplicação minha que só fatura "Roupa", o que é tudo a 23%... não preciso de muita coisa neste caso. no entanto, acho que deixei bem claro o seguinte: //J5 Base tributável de IVA à taxa intermédia * //.. //... //... //.... //..... //etc.... //N Total de impostos * //etc... que significa que podem e devem adaptar caso a caso. eu uso filestreamm direto da image QRCode, nao gravo o bmp antes de o gravar na BD, porque não preciso, mas cada um é que sabe como quer e pode adaptar na sua aplicação. quem tiver melhor que partilhe, pois como sabes, 95% das pessoas daqui só querem é a papinha toda feita, mas partilhar código fonte fodias-te. (sei que nao é o teu caso) -
AT - questões legais
brunotoira replied to marcolopes's topic in Software de Contabilidade, Finanças e Admin. Pública
EXATAMENTE, edita a unit ZXing... -
AT - questões legais
brunotoira replied to marcolopes's topic in Software de Contabilidade, Finanças e Admin. Pública
claro que dá. crias o campo na BD, tipo Blob e adicionas o campo no crystal. ele desenha o que gravar nesse campo. -
AT - questões legais
brunotoira replied to marcolopes's topic in Software de Contabilidade, Finanças e Admin. Pública
Só em Dezembro é que é preciso comunicar as nossas séries á AT, e eles devolvem-te um código para colocares no teu source code. até lá, é esperar, comer tremoços e beber finos. -
AT - questões legais
brunotoira replied to marcolopes's topic in Software de Contabilidade, Finanças e Admin. Pública
uses DelphiZXingQRCode; Procedure GravarDocumento ou ImprimirDocumento; var CodigoQR:String; ... ... ... begin Ao gravar documento ou antes de imprimir: //obter código unico //ainda estou a aguardar informação adicional sobre o pedido do ATCUD CodigoQR:=copy(AnsiReverseString(IntToStr(IBDOCS.fieldbyname('ID').Asinteger*4)),1,4); CodigoQR:=CodigoQR+IBDOCS.fieldbyname('SERIE').AsString; CodigoQR:=CodigoQR+copy(IntToStr(NumeroDocumento*2),5,9); //criar os campos para gerar o QRCode. //A NIF do emitente * //B NIF do adquirente * //C País do adquirente * //D Tipo de documento * //E Estado do documento * //F Data do documento * //G Identificação única do documento * //H ATCUD * //I1 Espaço fiscal * //I2 Base tributável isenta de IVA * //I3 Base tributável de IVA à taxa reduzida * //I4 Total de IVA à taxa reduzida * //I5 Base tributável de IVA à taxa intermédia * //I6 Total de IVA à taxa intermédia * //I7 Base tributável de IVA à taxa normal * //I8 Total de IVA à taxa normal * //J1 Espaço fiscal * //J2 Base tributável isenta * //J3 Base tributável deIVA à taxa reduzida * //J4 Total de IVA à taxa reduzida * //J5 Base tributável de IVA à taxa intermédia * //.. //... //... //.... //..... //etc.... //N Total de impostos * //O Total do documento com impostos * //Q 4 carateres do Hash * //R Nº do certificado * StringCodigo:='A:NIFEMISSOR*'; StringCodigo:=StringCodigo+'B:'+IBDocs.FieldByName('NRCONTRIBUINTE').AsString+'*'; StringCodigo:=StringCodigo+'C:PT*'; if TIPODOCUMENTO='FACTURA SIMPLIFICADA' then StringCodigo:=StringCodigo+'D:FS*'; if TIPODOCUMENTO='NOTA DE CREDITO' then StringCodigo:=StringCodigo+'D:NC*'; if TIPODOCUMENTO='RECIBO' then StringCodigo:=StringCodigo+'D:RE*'; //ETC... StringCodigo:=StringCodigo+'E:N*'; StringCodigo:=StringCodigo+'F:'+FORMATDATETIME('YYYYMMDD',IBDocs.FieldByName('DATADOC').AsDateTime)+'*'; StringCodigo:=StringCodigo+'G:'+IBDOCS.fieldbyname('INICIAISDOC').AsString + ' ' + IBDOCS.FIELDBYNAME('SERIE').AsString + '/' + IBDOCS.fieldbyname('NDOC').asstring+'*'; StringCodigo:=StringCodigo+'H:'+IBDocs.FieldByName('CODLOJA').AsString +'-'+IBDocs.FieldByName('NDOC').AsString+'*'; StringCodigo:=StringCodigo+'I1:PT*'; ibquery1.close; ibquery1.SQL.clear; ibquery1.SQL.add( 'select ROUND(TOTAISIVA1,2), ROUND(TOTAISIVA2,2), ROUND(TOTAISIVA3,2), ROUND(TOTAISIVA4,2) FROM DOCS WHERE tipodoc=:TIPODOC AND ndoc=:NDOC'); ibquery1.parambyname('TIPODOC').AsString := TIPODOCUMENTO; ibquery1.parambyname('NDOC').AsInteger := NumeroDocumento; ibquery1.open; while NOT ibquery1.eof do begin if ibquery1.FieldByName('IVA').AsInteger=6 then begin StringCodigo:=StringCodigo+'I3:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*'; StringCodigo:=StringCodigo+'I4:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*'; end; if ibquery1.FieldByName('IVA').AsInteger=13 then begin StringCodigo:=StringCodigo+'I5:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*'; StringCodigo:=StringCodigo+'I6:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*'; end; if ibquery1.FieldByName('IVA').AsInteger=23 then begin StringCodigo:=StringCodigo+'I7:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*'; StringCodigo:=StringCodigo+'I8:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*'; end; ibquery1.Next; end; StringCodigo:=StringCodigo+'N:'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALIVA').AsFloat,2))+'*'; StringCodigo:=StringCodigo+'O:'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALGERAL').AsFloat,2))+'*'; StringCodigo:=StringCodigo+'Q:'+copy(IBDocs.FieldByName('PRINTHASH').AsString,1,4)+'*'; //CODIGO HASH StringCodigo:=StringCodigo+'R:'+CodigoCertificado+'*'; // VOSSO NUMERO DE CERTIFICADO StringCodigo:=StringCodigo+'S:NU;'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALGERAL').AsFloat,2)); StringCodigo:=StringReplace(StringCodigo,',','.',[rfReplaceAll]); UpdateQRCode(StringCodigo,CodigoQR); //Isto vai-vos criar o BMP com o QRCode. //Depois só têm que grava-lo numa BD, e no CrystalReports, adicionar o campo dessa BD. +/- ISTO UPDATE DOCS SET IMAGEMQRCODE=FILESTREAM(C:\PASTATEMPORARIA\QRCODE\XXXXXXXXX.BMP Procedure TDataModule1.UpdateQRCode(Texto,Codigo:String); var QRCode: TDelphiZXingQRCode; //Gratuito é só ir buscar á net. Row, Column: Integer; Scale: Double; QRCodeBitmap: TBitmap; ImageQR:TImage; begin try ImageQR:=TImage.Create(self); QRCodeBitmap := TBitmap.Create; QRCode := TDelphiZXingQRCode.Create; QRCode.Data := Texto; QRCode.Encoding := TQRCodeEncoding(0); QRCode.QuietZone := 1; QRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns); for Row := 0 to QRCode.Rows - 1 do begin for Column := 0 to QRCode.Columns - 1 do begin if (QRCode.IsBlack[Row, Column]) then begin QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack; end else begin QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite; end; end; end; ImageQR.Canvas.Brush.Color := clWhite; ImageQR.Canvas.FillRect(Rect(0, 0, ImageQR.Width, ImageQR.Height)); if ((QRCodeBitmap.Width > 0) and (QRCodeBitmap.Height > 0)) then begin if (ImageQR.Width < ImageQR.Height) then begin Scale := ImageQR.Width / QRCodeBitmap.Width; end else begin Scale := ImageQR.Height / QRCodeBitmap.Height; end; ImageQR.Canvas.StretchDraw(Rect(0, 0, Trunc(Scale * QRCodeBitmap.Width), Trunc(Scale * QRCodeBitmap.Height)), QRCodeBitmap); end; ImageQR.Picture.SaveToFile('C:\PASTATEMPORARIA\QRCode\'+Codigo+'.bmp'); QRCode.Free; QRCodeBitmap.Free; except end; end; Delphi Se precisarem para outras linguagens de programação, mandem msg. -
Alguma informação util. Ultima versão dos webservices. ConfirmResponseReception: serviço a ser invocado pela Entidade, para confirmar a recepção do documento, após recepção no serviço SendDocument. Este serviço será de implementação facultativa, mas será uma forma de garantirmos que tudo o que foi enviado, foi recebido pela entidade (dado que pode ter ocorrido problemas de comunicação, e terem ficado alguns documentos “perdidos”) https://mega.nz/folder/eywSVaRC#Tk_ZjRbr9ocCDFeE4eD1XQ Qualquer duvida disponham.Responderei assim que possa
-
https://dre.pt/web/guest/home/-/dre/131228424/details/maximized Tudo adiado. 1 de janeiro de 2021, para as grandes empresas; 1 de julho 2021, para pequenas e médias empresas; 1 de janeiro de 2022, para as microempresas e para as entidades públicas enquanto entidades contratantes. se precisarem dos webservices, solicitem pf.