vatService

package module
v0.0.0-...-4ed90be Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 29, 2024 License: GPL-3.0 Imports: 7 Imported by: 0

README

vatService

A client library for the Greek VAT service written in Go. This is based on a fork of github.com/kamilakis/rgwspublic adding some minor functionality.

Installation

go get -u github.com/buffos/go-aade/vatservice

Dependencies

This library has no dependencies. The test library uses

Usage

package main

import (
    "fmt"
    "github.com/buffos/go-aade/vatservice"
	
	func main() {
		// Create a new client
		client := vatservice.NewClient("", "") // username, password
		// if left empty, the client loads the credentials from the environment variables GSIS_VAT_USERNAME and GSIS_VAT_PASSWORD
		vatCallingTheService := "" // the vat calling the service can be left empty.
		vatToCheck := "012314564" // the vat
		info, err := client.GetVATInfo(vatCallingTheService, vatToCheck) //
		
		if err != nil {
			fmt.Println(err)
		}
		
		// we can extract the basic info needed
		onomasia, doy, afm, address, zip, area := info.GetInvoiceData()
		fmt.Println(onomasia, doy, afm, address, zip, area)
		// also, we can get the main activity
		fmt.Println(info.GetMainActivity())
    }
)

The service translates the error codes to human-readable messages. You can also check if the error is of type vatservice.Error and get the error code and message.

	var e *vatService.Error
	errors.As(err, e)

References

Με τη χρήση αυτής της υπηρεσίας, τα νομικά πρόσωπα, οι νομικές οντότητες, και τα φυσικά πρόσωπα με εισόδημα από επιχειρηματική δραστηριότητα μπορούν να αναζητήσουν βασικές πληροφορίες, προκειμένου να διακριβώσουν τη φορολογική ή την επαγγελματική υπόσταση άλλων νομικών προσώπων ή νομικών οντοτήτων ή φορολογουμένων/φυσικών προσώπων που ασκούν επιχειρηματική δραστηριότητα.

H υπηρεσία στοχεύει στην καταπολέμηση της έκδοσης πλαστών και εικονικών στοιχείων από φορολογικά ανύπαρκτα πρόσωπα και παρέχεται κατόπιν γνωμοδότησης της Α.Π.Δ.Π.Χ. (με αριθ. 1/2011) και σύμφωνα με το άρθρο 20 του ν. 3842/2010 Αποκατάσταση φορολογικής δικαιοσύνης, αντιμετώπιση της φοροδιαφυγής και άλλες διατάξεις και το εδάφιο (ι) του άρθρου 17 του ν. 4174/2013 περί Κώδικα Φορολογικής Διαδικασίας.

Βήμα - βήμα
  1. Εγγραφή στην υπηρεσία κάνοντας χρήση των κωδικών TAXISnet.
  2. Απόκτηση ειδικών κωδικών πρόσβασης μέσω της εφαρμογής Διαχείριση Ειδικών Κωδικών.
  3. Χρήση ένος προγράμματος της αρεσκείας σας για την κλήση της υπηρεσίας.
Τα βασικά χαρακτηριστικά της υπηρεσίας είναι:
  • Η υπηρεσία μπορεί να αξιοποιηθεί απ’ όλους τους πιστοποιημένους χρήστες του TAXISnet.
  • Υπάρχει μηνιαίο όριο κλήσεων της υπηρεσίας.
  • Ο ΑΦΜ τα στοιχεία του οποίου αναζητούνται, ενημερώνεται με ειδική ειδοποίηση, για το ΑΦΜ / ονοματεπώνυμο που έκανε την αναζήτηση.
  • Μέσω της οθόνης εγγραφής στην υπηρεσία μπορεί κάποιος να εξουσιοδοτήσει ένα τρίτο ΑΦΜ να καλεί την υπηρεσία γι’ αυτόν.

Τα WSDL / ENDPOINT / XSD της αναβαθμισμένης υπηρεσίας είναι:

Πρόκειται για Soap JAX-WS 2.0 Web Service (έκδοσης SOAP 1.2).

Για να καλέσει ένας σταθμός εργασίας την υπηρεσία απαιτείται δικτυακή πρόσβαση στο www1.gsis.gr και στο port 443.

Εφόσον γίνει χρήση Java, απαιτείται χρήση Java 1.8 ή μεταγενέστερη λόγω της χρήσης του πρωτοκόλλου επικοινωνίας TLS1.2.

Περιλαμβάνονται:

a) παραδείγματα κλήσης (Request XML / Response XML) του Web Service,
b) ένα SoapUI project για να γίνει import στο SoapUI. Προτείνεται χρήση SoapUI Version 5.4.0 ή μεταγενέστερη λόγω της Java 1.8 ( https://www.soapui.org/downloads/latest-release.html ).
c) Τύπος δεδομένων, μέγεθος και τιμές επιστρεφόμενων στοιχείων
Συχνές ερωτήσεις - απαντήσεις
Βοηθητικό Υλικό

Documentation

Index

Constants

View Source
const (
	// Endpoint is the url for WSDL service
	Endpoint = "https://www1.gsis.gr/wsaade/RgWsPublic2/RgWsPublic2"
)

Variables

View Source
var (
	ErrCannotReachService = Error("δεν μπορέσαμε να συνδεθούμε με την υπηρεσία")
	ErrInvalidVAT         = Error("λανθασμένη μορφή ΑΦΜ")
	ErrInvalidCredentials = Error("το username και το password δεν μπορεί να είναι μικρότερα από 6 χαρακτήρες")
	ErrGeneral            = Error("Γενικό σφάλμα")
)
View Source
var ServiceErrors = map[string]Error{
	"RG_WS_PUBLIC_AFM_CALLED_BY_BLOCKED":             Error("Ο χρήστης που καλεί την υπηρεσία έχει προσωρινά αποκλειστεί από τη χρήση της."),
	"RG_WS_PUBLIC_AFM_CALLED_BY_NOT_FOUND":           Error("Ο Α.Φ.Μ. για τον οποίο γίνεται η κλήση δε βρέθηκε στους έγκυρους Α.Φ.Μ του Μητρώου TAXIS."),
	"RG_WS_PUBLIC_EPIT_NF":                           Error("O Α.Φ.Μ. για τον οποίο ζητούνται πληροφορίες δεν ανήκει και δεν ανήκε ποτέ σε νομικό πρόσωπο, νομική οντότητα, ή φυσικό πρόσωπο με εισόδημα από επιχειρηματική δραστηριότητα."),
	"RG_WS_PUBLIC_FAILURES_TOLERATED_EXCEEDED":       Error("Υπέρβαση μέγιστου επιτρεπτού ορίου πρόσφατων αποτυχημένων κλήσεων. Προσπαθήστε εκ νέου σε μερικές ώρες."),
	"RG_WS_PUBLIC_MAX_DAILY_USERNAME_CALLS_EXCEEDED": Error("Υπέρβαση μέγιστου επιτρεπτού ορίου ημερήσιων κλήσεων ανά χρήστη (ανεξαρτήτως εξουσιοδοτήσεων)."),
	"RG_WS_PUBLIC_MONTHLY_LIMIT_EXCEEDED":            Error("Υπέρβαση του Μέγιστου Επιτρεπτού Μηνιαίου Ορίου Κλήσεων."),
	"RG_WS_PUBLIC_MSG_TO_TAXISNET_ERROR":             Error("Δημιουργήθηκε πρόβλημα κατά την ενημέρωση των εισερχόμενων μηνυμάτων στο MyTAXIS net."),
	"RG_WS_PUBLIC_NO_INPUT_PARAMETERS":               Error("Δε δόθηκαν υποχρεωτικές παράμετροι εισόδου για την κλήση της υπηρεσίας."),
	"RG_WS_PUBLIC_SERVICE_NOT_ACTIVE":                Error("Η υπηρεσία δεν είναι ενεργή."),
	"RG_WS_PUBLIC_TAXPAYER_NF":                       Error("O Α.Φ.Μ. για τον οποίο ζητούνται πληροφορίες δε βρέθηκε στους έγκυρους Α.Φ.Μ του Μητρώου TAXIS."),
	"RG_WS_PUBLIC_TOKEN_AFM_BLOCKED":                 Error("Ο χρήστης (ή ο εξουσιοδοτημένος τρίτος) που καλεί την υπηρεσία έχει προσωρινά αποκλειστεί από τη χρήση της."),
	"RG_WS_PUBLIC_TOKEN_AFM_NOT_AUTHORIZED":          Error("Ο τρέχον χρήστης δεν έχει εξουσιοδοτηθεί από τον Α.Φ.Μ για χρήση της υπηρεσίας."),
	"RG_WS_PUBLIC_TOKEN_AFM_NOT_FOUND":               Error("Ο Α.Φ.Μ. του τρέχοντος χρήστη δε βρέθηκε στους έγκυρους Α.Φ.Μ του Μητρώου TAXIS."),
	"RG_WS_PUBLIC_TOKEN_AFM_NOT_REGISTERED":          Error("Ο τρέχον χρήστης δεν έχει εγγραφεί για χρήση της υπηρεσίας."),
	"RG_WS_PUBLIC_TOKEN_USERNAME_NOT_ACTIVE":         Error("Ο κωδικός χρήστη (username) που χρησιμοποιήθηκε έχει ανακληθεί."),
	"RG_WS_PUBLIC_TOKEN_USERNAME_NOT_AUTHENTICATED":  Error("Ο συνδυασμός χρήστη/κωδικού πρόσβασης που δόθηκε δεν είναι έγκυρος."),
	"RG_WS_PUBLIC_TOKEN_USERNAME_NOT_DEFINED":        Error("Δεν ορίσθηκε ο χρήστης που καλεί την υπηρεσία."),
	"RG_WS_PUBLIC_TOKEN_USERNAME_TOO_LONG":           Error("Διαπιστώθηκε υπέρβαση του μήκους του ονόματος του χρήστη (username) της υπηρεσίας"),
	"RG_WS_PUBLIC_WRONG_AFM":                         Error("O Α.Φ.Μ. για τον οποίο ζητούνται πληροφορίες δεν είναι έγκυρος."),
}

Functions

This section is empty.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

func NewClient

func NewClient(username, password string) *Client

NewClient creates a new client to call the greek VAT service

func (*Client) GetVATInfo

func (c *Client) GetVATInfo(calledBy, calledFor string) (*VATInfo, error)

GetVATInfo associated with a VAT number accepts a called by VAT and a called for VAT, username and password returns AFMData or an error

func (*Client) Version

func (c *Client) Version() (*string, error)

Version makes a call at the service and returns the version of the service

type Error

type Error string

func (Error) Error

func (e Error) Error() string

type ErrorInfo

type ErrorInfo struct {
	Code    string `xml:"Code>Value" json:"code"`
	Message string `xml:"Reason>Text" json:"message"`
}

ErrorInfo holds error info

type ErrorVATInfo

type ErrorVATInfo struct {
	Code    string `xml:"error_code" json:"code"`
	Message string `xml:"error_descr" json:"message"`
}

ErrorVATInfo holds error info

type FirmActivity

type FirmActivity struct {
	Code            int    `xml:"firm_act_code" json:"code"`                   // ΚΩΔΙΚΟΣ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ
	Description     string `xml:"firm_act_descr" json:"description"`           // ΠΕΡΙΓΡΑΦΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ
	Kind            int    `xml:"firm_act_kind" json:"kind"`                   // ΕΙΔΟΣ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ: 1=ΚΥΡΙΑ, 2=ΔΕΥΤΕΡΕΥΟΥΣΑ, 3=ΛΟΙΠΗ, 4=ΒΟΗΘΗΤΙΚΗ
	KindDescription string `xml:"firm_act_kind_descr" json:"kind_description"` // ΠΕΡΙΓΡΑΦΗ ΕΙΔΟΥΣ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ: ΚΥΡΙΑ, ΔΕΥΤΕΡΕΥΟΥΣΑ, ΛΟΙΠΗ, ΒΟΗΘΗΤΙΚΗ
}

type VATCalledBy

type VATCalledBy struct {
	TokenUsername       string `xml:"token_username" json:"username"`
	TokenAFM            string `xml:"token_afm" json:"vat"`
	TokenAFMFullName    string `xml:"token_afm_fullname" json:"vat_fullname"`
	AFMCalledBy         string `xml:"afm_called_by" json:"called_by"`
	AFMCalledByFullName string `xml:"afm_called_by_fullname" json:"vat_called_by_fullname"`
	AsOnDate            string `xml:"as_on_date" json:"as_on_date"`
}

VATCalledBy is the data relative who did the search.

type VATInfo

type VATInfo struct {
	CallSeqID  int            `xml:"call_seq_id" json:"call_seq_id"`
	CalledBy   VATCalledBy    `xml:"afm_called_by_rec" json:"called_by"`
	Result     VATResult      `xml:"basic_rec"  json:"result"`
	Activities []FirmActivity `xml:"firm_act_tab>item" json:"activities"`
	Error      *ErrorVATInfo  `xml:"error_rec" json:"error,omitempty"`
}

func (*VATInfo) GetInvoiceData

func (v *VATInfo) GetInvoiceData() (onomasia, doy, afm, address, zip, area string)

GetInvoiceData returns the data needed for an invoice

func (*VATInfo) GetMainActivity

func (v *VATInfo) GetMainActivity() string

GetMainActivity returns the main activity of the entity

func (*VATInfo) String

func (v *VATInfo) String() string

String returns a string representation of a VATInfo

type VATResult

type VATResult struct {
	AFM                         string `xml:"afm" json:"afm"`                                              // ΑΦΜ
	DOY                         string `xml:"doy" json:"doy"`                                              // ΚΩΔΙΚΟΣ ΔΟΥ
	DOYDescription              string `xml:"doy_descr" json:"doy_description"`                            // ΠΕΡΙΓΡΑΦΗ ΔΟΥ
	InitialFlagDescription      string `xml:"i_ni_flag_descr" json:"initial_flag_description"`             // ΦΠ /ΜΗ ΦΠ
	DeactivationFlag            string `xml:"deactivation_flag" json:"deactivation_flag"`                  // ΕΝΔΕΙΞΗ ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΟΣ ΑΦΜ:1=ΕΝΕΡΓΟΣ ΑΦΜ 2=ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΟΣ ΑΦΜ
	DeactivationFlagDescription string `xml:"deactivation_flag_desc" json:"deactivation_flag_description"` // ΕΝΔΕΙΞΗ ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΟΣ ΑΦΜ(ΠΕΡΙΓΡΑΦΗ): ΕΝΕΡΓΟΣ ΑΦΜ ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΟΣ ΑΦΜ
	FirmFlagDescription         string `xml:"firm_flag_descr" json:"firm_flag_description"`                // ΤΙΜΕΣ: ΕΠΙΤΗΔΕΥΜΑΤΙΑΣ, ΜΗ ΕΠΙΤΗΔΕΥΜΑΤΙΑΣ, ΠΡΩΗΝ ΕΠΙΤΗΔΕΥΜΑΤΙΑΣ
	Onomasia                    string `xml:"onomasia" json:"onomasia"`                                    // ΕΠΩΝΥΜΙΑ
	CommercialTitle             string `xml:"commer_title" json:"commercial_title"`                        // ΤΙΤΛΟΣ ΕΠΙΧΕΙΡΗΣΗΣ
	LegalStatusDescription      string `xml:"legal_status_descr" json:"legal_status_descr"`                // ΠΕΡΙΓΡΑΦΗ ΜΟΡΦΗΣ ΜΗ Φ.Π.
	PostalAddress               string `xml:"postal_address" json:"postal_address"`                        // ΟΔΟΣ ΕΠΙΧΕΙΡΗΣΗΣ
	PostalAddressNo             string `xml:"postal_address_no" json:"postal_address_no"`                  // ΑΡΙΘΜΟΣ ΕΠΙΧΕΙΡΗΣΗΣ
	PostalZipCode               string `xml:"postal_zip_code" json:"postal_zip_code"`                      // ΤΑΧ. ΚΩΔ. ΕΠΙΧΕΙΡΗΣΗΣ
	PostalAreaDescription       string `xml:"postal_area_description" json:"postal_area_description"`      // ΠΕΡΙΟΧΗ ΕΠΙΧΕΙΡΗΣΗΣ
	RegistrationDate            string `xml:"regist_date" json:"registration_date"`                        // ΗΜ/ΝΙΑ ΕΝΑΡΞΗΣ
	StopDate                    string `xml:"stop_date" json:"stop_date"`                                  // ΗΜ/ΝΙΑ ΔΙΑΚΟΠΗΣ
	NormalVATSystemFlag         string `xml:"normal_vat_system_flag" json:"normal_vat_system_flag"`
}

VATResult is the data relative to an entity's VAT search

type XMLBody

type XMLBody struct {
	VATInfo VATInfo    `xml:"rgWsPublic2AfmMethodResponse>result>rg_ws_public2_result_rtType"`
	Version *string    `xml:"rgWsPublic2VersionInfoResponse>result"`
	Error   *ErrorInfo `xml:"Fault" json:"error,omitempty"`
}

XMLBody is the body of a response

type XMLResponse

type XMLResponse struct {
	XMLName xml.Name `xml:"Envelope"`
	Body    XMLBody  `xml:"Body"`
}

XMLResponse is where we parse an http response

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL