| syntax = "proto3"; |
| package invoice; |
| option go_package = "code.hackerspace.pl/hscloud/bgpwtf/invoice/proto"; |
| |
| message Item { |
| string title = 1; |
| uint64 count = 2; |
| uint64 unit_price = 3; |
| // in thousands of percent points |
| // (ie 23% == 23000) |
| uint64 vat = 4; |
| // Denormalized fields follow. |
| uint64 total_net = 5; |
| uint64 total = 6; |
| } |
| |
| message ContactPoint { |
| string medium = 1; |
| string contact = 2; |
| } |
| |
| 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; |
| // Next tag: 15 |
| } |
| |
| 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; |
| int64 due_date = 5; |
| // Denormalized fields follow. |
| uint64 total_net = 6; |
| uint64 total = 7; |
| string unit = 8; |
| } |
| |
| 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 { |
| } |
| |
| service Invoicer { |
| rpc CreateInvoice(CreateInvoiceRequest) returns (CreateInvoiceResponse); |
| rpc GetInvoice(GetInvoiceRequest) returns (GetInvoiceResponse); |
| rpc RenderInvoice(RenderInvoiceRequest) returns (stream RenderInvoiceResponse); |
| rpc SealInvoice(SealInvoiceRequest) returns (SealInvoiceResponse); |
| } |