syntax = "proto3";
package invoice;
option go_package = "code.hackerspace.pl/hscloud/bgpwtf/invoice/proto";

// GTU codes as defined by JPK_V7. In context of polish VAT/tax law.
//   Original schema: http://crd.gov.pl/wzor/2020/05/08/9393/schemat.xsd
// These are used to tag invoice Items. These then get coalesced when an
// Invoice gets created, and that set of tags (specific now to an invoice)
// is then submitted to accounting.
// Numerical values of each code correspond to its numeric name (which is
// enshrined in the JPK schema).
// For each value, we provide one of more of following comments:
//  - PL: official polish <xsd:documentation> field from schema.
//  - EN: non-legally binding english translation for internal documentation
//        purposes.
//  - COMMENT: extra comments for internal documentation purposes.
enum GTUCode {
    GTU_INVALID = 0;
    // PL: Dostawa napojów alkoholowych - alkoholu etylowego, piwa, wina,
    //     napojów fermentowanych i wyrobów pośrednich, w rozumieniu przepisów
    //     o podatku akcyzowym
    // EN: Supply of alcoholic beverages - ethanol, beer, wine, fermented
    //     beverages and intermediate products, within the meaning of
    //     provisions on excise duty.
    GTU_01 = 1;
    // PL: Dostawa towarów, o których mowa w art. 103 ust. 5aa ustawy
    // EN: Supply of goods referred to in Art. 103 paragraph 5aa of the VAT law
    // COMMENT: liquid fuels.
    GTU_02 = 2;
    // PL: Dostawa oleju opałowego w rozumieniu przepisów o podatku akcyzowym
    //     oraz olejów smarowych, pozostałych olejów o kodach CN od 2710 19 71
    //     do 2710 19 99, z wyłączeniem wyrobów o kodzie CN 2710 19 85 (oleje
    //     białe, parafina ciekła) oraz smarów plastycznych zaliczanych do kodu
    //     CN 2710 19 99, olejów smarowych o kodzie CN 2710 20 90, preparatów
    //     smarowych objętych pozycją CN 3403, z wyłączeniem smarów
    //     plastycznych objętych tą pozycją
    // EN: Supply of fuel oil under the provisions of provisions on excise
    //     duty, and lubricating oils, other oils with CN codes from 2710 19 71
    //     do 2710 19 99, except products with code CN 2710 19 85 (while
    //     mineral oils, liquid paraffin) and high viscosity oils classified
    //     under code CN 2710 19 199, lubricating oils with code CN 2710 20 90,
    //     lubricating products classified under code CN 3403, except high
    //     viscosity lubricants classified under this code.
    GTU_03 = 3;
    // PL: Dostawa wyrobów tytoniowych, suszu tytoniowego, płynu do papierosów
    //     elektronicznych i wyrobów nowatorskich, w rozumieniu przepisów o
    //     podatku akcyzowym
    // EN: Supply of tobacco products, dried tobacco, electronic cigarette
    //     liquids and designer products, within the meaning of provisions on
    //     excise duty.
    GTU_04 = 4;
    // PL: Dostawa odpadów - wyłącznie określonych w poz. 79-91 załącznika nr
    //     15 do ustawy
    // EN: Waste supply - only as defined in annex 15 position 79-91 of the VAT
    //     law.
    // COMMENT: non-WEEE waste, except batteries.
    GTU_05 = 5;
    // PL: Dostawa urządzeń elektronicznych oraz części i materiałów do nich,
    //     wyłącznie określonych w poz. 7-9, 59-63, 65, 66, 69 i 94-96 załącznika
    //     nr 15 do ustawy
    // EN: Supply of electronic devices and components thereof, only as defined
    //     in annex 15, positions 7-9, 59-63, 65, 66, 69 and 94-96 of the VAT
    //     law.
    // COMMENT: print cartridges, ink, plastics, processors, computers, HDDs,
    //          SSDs, mobile phones, video game consoles, photo cameras,
    //          photocopier parts, software bundles on SSDs, video on SSDs.
    // COMMENT: tl;dr computer accessories and stuff, but not CDs/DVDs.
    GTU_06 = 6;
    // PL: Dostawa pojazdów oraz części samochodowych o kodach wyłącznie CN
    //     8701 - 8708 oraz CN 8708 10
    // EN: Supply of vehicles and car parts only with CN codes 8701-8708 and CN
    //     8708 10.
    GTU_07 = 7;
    // PL: Dostawa metali szlachetnych oraz nieszlachetnych - wyłącznie
    //     określonych w poz. 1-3 załącznika nr 12 do ustawy oraz w poz. 12-25,
    //     33-40, 45, 46, 56 i 78 załącznika nr 15 do ustawy
    // EN: Supply of precious and common metals - only as defined in annex 12
    //     positions 1-3 and annex 15 positions 12-25, 33-40, 45, 46, 56, 78 of
    //     the VAT law.
    // COMMENT: metals but also wax/stearine for sculpting, metal waste,
    //          antiques (>100Y) containing metal.
    GTU_08 = 8;
    // PL: Dostawa leków oraz wyrobów medycznych - produktów leczniczych,
    //     środków spożywczych specjalnego przeznaczenia żywieniowego oraz
    //     wyrobów medycznych, objętych obowiązkiem zgłoszenia, o którym mowa w
    //     art. 37av ust. 1 ustawy z dnia 6 września 2001 r. - Prawo
    //     farmaceutyczne (Dz. U. z 2019 r. poz. 499, z późn. zm.)
    // EN: Supply of medicine and medical products - [...]
    GTU_09 = 9;
    // PL: Dostawa budynków, budowli i gruntów
    // EN: Supply of buildings, structures and land.
    GTU_10 = 10;
    // PL: Świadczenie usług w zakresie przenoszenia uprawnień do emisji gazów
    //     cieplarnianych, o których mowa w ustawie z dnia 12 czerwca 2015 r. o
    //     systemie handlu uprawnieniami do emisji gazów cieplarnianych (Dz. U.
    //     z 2018 r. poz. 1201 i 2538 oraz z 2019 r. poz. 730, 1501 i 1532)
    // EN: Supply of services related to transfer of greenhouse gas emission
    //     allowances, as defined in Dz. U. z 2018r. poz. 1201 i 2538 oraz z
    //     2019r.  poz. 730, 1501 i 1532.
    GTU_11 = 11;
    // PL: Świadczenie usług o charakterze niematerialnym - wyłącznie:
    //     doradczych, księgowych, prawnych, zarządczych, szkoleniowych,
    //     marketingowych, firm centralnych (head offices), reklamowych,
    //     badania rynku i opinii publicznej, w zakresie badań naukowych i prac
    //     rozwojowych
    // EN: Supply of non-material services - only: consulting, accounting,
    //     legal, managerial, training, marketing, head offices, advertisement,
    //     market and public opinion study, within academic research and R&D.
    // COMMENT: IT consulting falls under this.
    GTU_12 = 12;
    // PL: Świadczenie usług transportowych i gospodarki magazynowej - Sekcja H
    //      PKWiU 2015 symbol ex 49.4, ex 52.1
    // EN: Supply of transport and logistics services [...].
    GTU_13 = 13;
}

// SP codes as defined by JPK_V7. In context of polish VAT/tax law.
//   Original schema: http://crd.gov.pl/wzor/2020/05/08/9393/schemat.xsd
// These are used to tag invoices, and describe sale procedures regarding this
// invoice.
// Numerical values are arbitrary.
// For each value, we provide one of more of following comments:
//  - PL: official polish <xsd:documentation> field from schema.
//  - EN: non-legally binding english translation for internal documentation
//        purposes.
//  - COMMENT: extra comments for internal documentation purposes.
enum SPCode {
    SP_INVALID = 0;
    // PL: Dostawa w ramach sprzedaży wysyłkowej z terytorium kraju, o której
    //     mowa w art. 23 ustawy
    // EN: Mail Order sales, as per art. 23 of the VAT law.
    SP_SW = 1;
    // PL: Świadczenie usług telekomunikacyjnych, nadawczych i elektronicznych,
    //     o których mowa w art. 28k ustawy
    // EN: Supply of telecommunication, broadcast and electronic services as
    //     per artc. 28k of the VAT law.
    // COMMENT: MOSS EU VAT sales.
    SP_EE = 2;
    // PL: Istniejące powiązania między nabywcą a dokonującym dostawy towarów
    //     lub usługodawcą, o których mowa w art. 32 ust. 2 pkt 1 ustawy
    // EN: Existing connection between the buyer and supplier of goods or
    //     services, as per art. 32, par. 2 point 2 of the VAT law
    SP_TP = 3;
    // PL: Wewnątrzwspólnotowe nabycie towarów dokonane przez drugiego w
    //     kolejności podatnika VAT w ramach transakcji trójstronnej w
    //     procedurze uproszczonej, o której mowa w dziale XII rozdziale 8
    //     ustawy
    // EN: Intra-EU goods supply by the second VAT taxpayer in a tripartite
    //     simplified procedures as defined insection XII chapter 8 of the VAT
    //     law
    SP_TT_WNT = 4;
    // PL: Dostawa towarów poza terytorium kraju dokonana przez drugiego w
    //     kolejności podatnika VAT w ramach transakcji trójstronnej w
    //     procedurze uproszczonej, o której mowa w dziale XII rozdziale 8
    //     ustawy
    // EN: Foreign goods supply by the second VAT taxpayer in a tripartite
    //     simplified procedures as defined insection XII chapter 8 of the VAT
    //     law
    SP_TT_D = 5;
    // PL: Świadczenie usług turystyki opodatkowane na zasadach marży zgodnie z
    //     art. 119 ustawy
    // EN: Supply of tourism services under magin tax as per art. 119 of the
    //     VAT law
    SP_MR_T = 6;
    // PL: Dostawa towarów używanych, dzieł sztuki, przedmiotów
    //     kolekcjonerskich i antyków, opodatkowana na zasadach marży zgodnie z
    //     art. 120 ustawy
    // EN: Supply of used goods, art, collectibles and antiques under margin
    //     tax as per art 120 of the VAT law
    SP_MR_UZ = 7;
    // PL: Wewnątrzwspólnotowa dostawa towarów następująca po imporcie tych
    //     towarów w ramach procedury celnej 42 (import)
    // EN: Intra-EU goods supply after import of these goods as part of the
    //     customs procedure 42 (import)
    SP_I_42 = 8;
    // PL: Wewnątrzwspólnotowa dostawa towarów następująca po imporcie tych
    //     towarów w ramach procedury celnej 63 (import)
    // EN: Intra-EU goods supply after import of these goods as part of the
    //     customs procedure 63 (import)
    SP_I_63 = 9;
    // PL: Transfer bonu jednego przeznaczenia dokonany przez podatnika
    //     działającego we własnym imieniu, opodatkowany zgodnie z art. 8a ust.
    //     1 ustawy
    // EN: Transfer of a single-purpose voucher by a taxpayer acting on their
    //     own behalf, taxed under art. 8a paragraph 1 of the VAT law
    SP_B_SPV = 10;
    // PL: Dostawa towarów oraz świadczenie usług, których dotyczy bon jednego
    //     przeznaczenia na rzecz podatnika, który wyemitował bon zgodnie z
    //     art. 8a ust. 4 ustawy
    // EN: Supply of goods and services affected by single-purpose voucher for
    //     a taxpayer, which emitted that voucher in accordance with art. 8a
    //     paragraph 4 of the VAT law
    SP_B_SPV_DOSTAWA = 11;
    // PL: Świadczenie usług pośrednictwa oraz innych usług dotyczących
    //     transferu bonu różnego przeznaczenia, opodatkowane zgodnie z art. 8b
    //     ust. 2 ustawy
    // EN: Supply of intermediary services and other services relating to the
    //     transfer of multi-purpose vouchers, taxed in accordance with art. 8b
    //     paragraph 2 of the VAT law
    SP_B_MPV_PROWIZJA = 12;
    // PL: Transakcja objęta obowiązkiem stosowania mechanizmu podzielonej
    //     płatności
    // EN: Transaction required to use the VAT split payment mechanism
    SP_MPP = 13;
}


// VAT invoice item (ie. entry).
message Item {
    string title = 1;
    uint64 count = 2;
    uint64 unit_price = 3;
    // in thousands of percent points
    // (ie 23% == 23000)
    uint64 vat = 4;
    // GTU codes for this item.
    repeated GTUCode gtu_code = 7;

    // Denormalized fields follow. These are only present in Invoice, not
    // InvoiceData.
    uint64 total_net = 5;
    uint64 total = 6;
    // Next tag: 8
}

// Point of contact for an invoice.
message ContactPoint {
    string medium = 1;
    string contact = 2;
}

// Invoice 'intent' - ie. data given by an Invoice creator. These never change
// after creation.
message InvoiceData {
    repeated Item item = 1;
    repeated string invoicer_billing = 2;
    repeated ContactPoint invoicer_contact = 3;
    repeated string customer_billing = 4;
    string invoicer_vat_id = 5;
    string invoicer_company_number = 12;
    string customer_vat_id = 6;
    bool reverse_vat = 7;
    bool us_customer = 11;
    // Optional, if not given the proforma will be created with the current time.
    int64 date = 14;
    int64 days_due = 8;
    string iban = 9;
    string swift = 10;
    string unit = 13;
    repeated SPCode sp_code = 15;
    // Next tag: 16
}

message Invoice {
    // Original invoice parameters/data.
    InvoiceData data = 1;
    enum State {
        STATE_INVALID = 0;
        STATE_PROFORMA = 1;
        STATE_SEALED = 2;
    };
    State state = 2;
    string uid = 9;
    // If sealed, otherwise 'proforma'.
    string final_uid = 3;
    int64 date = 4;
    // Denormalized fields follow.
    int64 due_date = 5;
    uint64 total_net = 6;
    uint64 total = 7;
    string unit = 8;
    repeated GTUCode gtu_code = 10;
    // Next tag: 11;
}

message CreateInvoiceRequest {
    InvoiceData invoice_data = 1;
}

message CreateInvoiceResponse {
    // Unique invoice ID
    string uid = 1;
}

message GetInvoiceRequest {
    string uid = 1;
}

message GetInvoiceResponse {
    Invoice invoice = 1;
}

message RenderInvoiceRequest {
    string uid = 1;
    string language = 2;
}

message RenderInvoiceResponse {
    bytes data = 1;
}

message SealInvoiceRequest {
    string uid = 1;
    enum DateSource {
        DATE_SOURCE_NOW = 0;
        DATE_SOURCE_PROFORMA = 1;
    }
    DateSource date_source = 2;
    string language = 3;
}

message SealInvoiceResponse {
}

message GetInvoicesRequest {
    // Return all invoices issued in a given year.
    message ForYear {
        int32 year = 1;
    }
    // Return all invoices issued in a given month of a year.
    message ForMonth {
        int32 year = 1;
        int32 month = 2;
    }

    oneof range {
        ForYear for_year = 1;
        ForMonth for_month = 2;
    }
}

message GetInvoicesResponse {
    // Each chunk may contain an arbitrary amount of invoices, and each
    // GetInvoices request may return an arbitrary amount of
    // GetInvoicesResponses in a stream.
    repeated Invoice invoice = 1;
}

service Invoicer {
    // Create an invoice with given data, returning UID. The newly created
    // invoice is created as a proforma invoice and not yet sealed, ie. not
    // given a unique, sequential ID.
    rpc CreateInvoice(CreateInvoiceRequest) returns (CreateInvoiceResponse);

    // Get invoice details for a given UID.
    rpc GetInvoice(GetInvoiceRequest) returns (GetInvoiceResponse);

    // Return chunks of a rendered PDF for a given UID. If the invoice is
    // sealed, the stored PDF will be returned, otherwise a PDF will be
    // rendered on the fly.
    rpc RenderInvoice(RenderInvoiceRequest) returns (stream RenderInvoiceResponse);

    // Seal invoice, ie. assign it a sequential ID and render it to an
    // immutable PDF for audit purposes.
    rpc SealInvoice(SealInvoiceRequest) returns (SealInvoiceResponse);

    // Return a summarized detail of invoice data for a given filter.
    rpc GetInvoices(GetInvoicesRequest) returns (stream GetInvoicesResponse);
}
