Contents
Purpose
Pricing module automates the process of calculation of commissions and charges for air tickets, management of carrier's commission rules, agency fees and sub-agents' commissions.
- allows you to quickly set up even complex commission rules,
- allows you to build a convenient and clear pricing scheme,
- accurately comply with the difficult conditions provided by airlines,
- guarantees correct calculations,
- provides a tool to control the correctness of calculations.
Principle of operation
The module's operation is based on the agency's pricing rules.
Rule — set of "commission and fee values" and "conditions of their application".
Values of commissions and charges is:
- commission from the airline,
- airline bonus,
- agency charge,
- commission for subagents.
Condition of application for commissions and charges — a set of flight parameters to which the fees and charges of the rules will apply ("validating carrier", "GDS", "flight type", "passenger types", etc.).
Pricing rules are defined in a table in an XLS or XLSX file, where:
- "Table string" - rule.
- " String cell" - parameter value.
- "Column header" - parameter name.
Each line is a separate rule.
For one flight, only one rule is selected by criteria and only one rule applies.
Before calculating the commissions, the pricing module determines the availability of the flight for the ticketing and the rule by which the commissions and fees are calculated, using the following algorithm:
- The module records which airline GDS has defined as the validating airline;
- Finds all the rules for that airline in the pricing file;
- Selects the rules that match the flight by all parameters;
- Selects one of the appropriate rules by priority criteria;
- If the triggered rule does not contain an override of the validating carrier, the validating carrier obtained from the GDS is established.
- * If the triggered rule contains an override of the validating carrier, the overriding validating carrier is set.
- The rule applies.
The agency may only issue online flights of contract airlines. An airline is considered a contract airline if it has at least 1 rule in its uploaded pricing file.
Attention! The flight cannot be ticketed if:
- there are no rules for the airline. It is recommended to delete such flights from the search results filter output "Airline is not contract".
- rules for the airline are established, but the flight parameters do not correspond to the rule parameters.
Commissions and charges are calculated each time an order is updated according to the rules loaded into the system at the time of checking:
- when the search results are generated,
- at the time of booking,
- when switching to payment and ticketing,
- when updating the order page.
If, during the period between booking and ticketing, rules were changed, аfter bookingб the order the commissions will be calculated according to the new rules, so the price at the time of booking and the price at the ticketing may differ. The behavior of the system in case of such a situation is set by the parameter Recalculate service charge under System Settings → Background Processes → Synchronization Events. You can track the calculation of commissions valid at the time of booking in the logs on order.
In the price details (on the order page) and in the itinerary receipt information on the charges is provided in accordance with one of the modes of division of charges by passengers:
- Equally divided between non-zero ticket prices - agency and subagency charges are divided equally between all passengers with fare and tax more than 0. This mode is selected by default.
- Equivalent between all fares - agency and subagency charges are divided equally among all passengers.
- Proportional to fares - agency and subagency charges are divided proportionally to the fare price for a particular passenger in the total amount of the order, i.e. the more the fare price is, the more part of the charge is allocated for it.
- Only to the first type of passenger - agency and subagency charges are allocated to the first type of passenger.
- Proportional to fares , except for infants - agency and subagency charges are divided proportionally to the fare price for a particular passenger in the total amount of the order, except for infants.
The fees in the price details are presented with the division only if they are hidden in XP/XX taxes, otherwise they are displayed as a separate line without division.
You can find the setting in the Sales Management - Air Tickets - Pricing - Settings - Passenger Fee Splitting Mode.
Commission calculation for non-contractual airlines
The agency may "issue tickets" to "non-contractual" airlines on "clean interline" terms between the airlines.
For example,
- The agency has no contract with "AA" airline.
- The agency has a contract with "BB" airline.
- There is an interline agreement between "AA" and "BB" companies, which allows issuing tickets for "AA" on "BB" form.
To issue tickets for "AA" airline, the agency has a rule for "AA" airline, which specifies:
- Validating carrier: «AA»,
- redefined carrier: «BB»,
- share of interline segments:«1»,
- airline commission: specify the amount of commission provided by "BB" for tickets with 100% share of interline segments.
Attention! The Websky system does not monitor the presence of interline agreements between carriers. Responsibility for redefinition lies entirely with the agency.
Selecting the rule for calculation
Commissions for the flight are calculated by one rule. If several rules are suitable for the flight, the system chooses the rule for calculation by priority criteria. Rules are compared on the first criterion, if the criterion in this case does not work, on the second and so on, until one rule is defined.
The order of comparing the rules to select the rule for the calculation:
- By "Priority" column - if the triggered rules have a priority, the rule with the highest priority is selected.
- By the presence of an overridden carrier - if several rules with the same priority are triggered (or the priority is not specified), the rule with the overridden VC is selected.
- For a nonempty Commission cell - the priority of the rules with an established commission (even in 0%) is higher than that of the rules with an empty cell.
- Extra priority - Manually set in the section Product control → Avia tickets → Pricing → Settings by the parameter Extra priority:
- * 'No - no additional priority is set.
- * 'Maximum commission from the airline - the rule with the maximum commission from the airline is selected.
- *'By the number of parameters in the rule - the rule with the largest number of non-empty parameters is selected.
- Rule's ordinal number - if none of the priorities is applicable, the newer rule is considered the priority (the table below the others).
Testing and debugging of rule triggering
All calculations at each stage of their application are logged and displayed in the debug table. The debug table is used to control how the rules work, providing information about how the rules apply to the selected flight.
Link to the debug table is available to the manager and experts of the root agency:
- to display search results for each flight by the Commission link,
- on the order page, in the flight price detail, by clicking on the amount of commission or charge.
Table columns — pricing parameters.
Column header — values of pricing parameters for the flight being checked.
Table rows — Pricing rules "for the validating carrier" of the flight.
The table shows the order in which parameters are checked.
The parameters of each rule are compared in the flight parameters:
- if they match:
- the cell is highlighted in green,
- the following parameter is checked;
- if the value of the flight parameter does not match the value of the rule parameter:
- the cell is highlighted in red,
- rule check stops.
If a rule matches all parameters, the rule applies, commissions and fees are highlighted with green light, and their calculated values are displayed next to each other.
Enabling module. Rules Import and Export
To enable the calculation of commissions using Pricing, enable the Commissions 2.0 and Charges and Discounts 2.0 options in Product control → Avia tickets → Pricing → Settings.
To set the pricing rule:
- Go to Product control → Avia tickets → Pricing → Excel import/export.
- Press Upload in "xls" format or Upload in "xlsx" format. Open the file to edit.
- Set the rule: Fill in the string parameters. The format of data entry in each column must correspond to a strictly defined format (see Rules Import).
Obligatory parameters to fill in:- validating carrier.
- commission #
- Save the changes to the file.
- On the Excel import/export page in the Administration panel click Browse, open the file.
- Click Send to upload the file to the system.
During import, the system will validate all entered values. If a value is entered in a cell in an incorrect format, the system will report an error while saving all correctly defined rules.
After validation, the page displays a table showing all loaded rules in a compressed form.
The table provides color-coded rules that are currently invalid:
- rules that have not yet come into effect (the sale start date is higher than the current date, see Parameters of Pricing Rules) are highlighted in orange,
- the rules that have expired (the sale expiration date is greater than the current date) are highlighted in purple.
Pricing rule parameters
Template of file for entering pricing rules:
File:CommImportExampleV1.0.5.xlsx
Attention! It is forbidden to rename columns!
But it is allowed to change columns and remove unnecessary columns.
To view the description of parameters expand the table:
Pricing rule parameters | ||||
Title | Internal name | Description | Permissible values | Examples |
---|---|---|---|---|
id | id | A unique record number from any external system (or database). Optional parameter. It does not participate in the calculation logic and is used for convenient rule identification. | any value | 123 |
GDS validating carrier | valCompanyId | The airline for which the rule is set. Must be the contract airline of the agent. If it is necessary to make ticketing on the stock of another airline (by interline), the validating carrier is redefined (see Redefined validating carrier). If the validating carrier from GDS is unacceptable by specified pricing rules and is not overridden - the flight is considered unacceptable for ticketing and is removed from search results with appropriate settings of results filtering. | empty is ignored
2-digit IATA airline code |
SU
LH |
redefined vc | manualVV | If the validating carrier proposed by the GDS is not a contractual carrier or does not satisfy the commission agent, it can be overridden through this field. The VC field indicates the VC from GDS (or it is left empty), and this field indicates the carrier redefined by the agency.
The agent is responsible for acceptance of replacement and adequacy of the flight price (which was calculated by GDS for the carrier offered to it). The priority for the rules with the redefinition is higher than for the rules without it. |
empty is ignored
2-digit IATA airline code |
SU
LH |
first segment carriers | airlines | A set of acceptable marketing carriers of the first segment of the route. | empty = any CODE,CODE... <>CODE,CODE...(except) |
SU,LH,BA
<>S7,SU |
carriers of any segment | airlinesAny | A set of acceptable marketing carriers (interlines) of any segment of the route.
Permissible input options:
|
empty = any - one or more values (see description) |
SU,LH,BA SU,LH! <>S7,SU <>S7,BA! |
code sharing | codeSharing | Permissibility of a flight being operated by another (operating) airline | empty - all flights 1 - code sharing is required 0 - code sharing is prohibited |
0
1 |
operators | operatingAirlines | Permissible operating airlines (need to be tested on all segments).
Input options:
|
empty = any - one or more values (see description) |
SU,LH,BA SU,LH! <>S7,SU <>S7,BA! |
own segment share | ownPart | The minimum allowed share of own segments (segments where the validating carrier is equal to a marketing one) must be greater than or equal to a given value (any number from 0 to 1):
|
empty = any number any number from 0 to 1 |
0.88 |
interline segment share | interlinePart | The minimum allowed percentage of nonproprietary segments (segments where the validating carrier is not equal to the marketing one) must be greater than or equal to the specified value (any number from 0 to 1).
|
empty = any number any number from 0 to 1 |
0.88 |
contract type | contractType | BSP or TCH settlement system | empty = any, BSP TCH |
TCH |
booking systems | gds | Global distribution system, in which the flight/ PCC of specific Websky requisites/ ID of the Websky requisite package was found.
Listed in any sequence, you can mix different types. The "or" rule applies: if the whole Sabre is specified, you don’t need to specify all its PCC/packages. Attention! When specifying the name of the GDS, strictly follow the name format specified in the documentation. If the rule doesn’t match with the template, it will not apply! |
empty = any ГРС: SABRE, GALILEO, AMADEUS, SIRENA, SITA, SIG23 PCC: [letters+digits] Package ID: [digits] |
SABRE,670P,123
AMADEUS,GALILEO SITA |
start of sale | paymentDateFrom | Minimum allowed date of order execution (not to be confused with the date of departure). To trigger the rule, the current date must be greater or equal to the specified one. | empty = ignored DD.MM.YYYY |
01.01.2012
31.01.2010 |
end of sale | paymentDateTo | Maximum allowable date for placing an order. To trigger a rule, the current date must be less or equal to the specified date. | empty = ignored DD.MM.YYYY |
31.12.2022 |
flight type | airlineType | International or domestic (all flights within the same country) flight.
One value |
empty = any IA (international airlines) DA (domestic airlines) |
IA DA |
flight numbers | flightNumber | Permissible flight numbers, can be specified with or without the code of the marketing company.
Input variants:
|
empty = any - one or more values (see description) |
SU 123,SU 345 123,345 <>LH 555 |
aircraft type | aircraft | Permissible aircraft codes, must be specified in the same form as the codes returned by the GDS.
Input variants:
|
empty = any - one or more values (see description) |
73C,DH4 735 |
fare codes | tariffs | Permissible tariff codes. At least one fare from the flight must coincide with one from the given list. If there is a rule with denial, there must be no matches. The match is not exact: the code from the rule may be contained in the code from the flight (for example, the entered S1GREY26 will match S1GREY26CH from the flight).
Input variants:
You can set a regular expression. To do this, write the parameter in /XXX/ format. Examples:
|
empty = any - one or more values (see description) |
WRUTH9PL,ARUTH9PL
|
maximum fare | maxTariff | Restriction on the maximum price value of the "base price" (the sum of all fares from the carriers on the flight or the price from GDS minus taxes). If the parameter is set, the rule written in the line is triggered only if the flight fare is less than or equal to the specified value. | empty = no limit xxxCODE (see examples) |
10000RUB 300EUR |
Private fare | privateFare | To trigger the rule, the flight must have a fare with the sign of confidential (private). This information is provided by GDS. If it's enough to indicate a specific code of a private fare to unambiguously define the rule, it's not necessary to set the sign. | empty = any fares 1 — a private one must be present 0 — there must be no private fares |
0 1 |
tax codes | taxes | Permissible tax codes
Input variants:
where CODE is a set of capital Latin letters. |
empty = any - one or more values (see description) |
YQ,YR <>YQ! |
price confirmed | priceIsActual | An attribute of a confirmed flight price. The flight price after search is considered unconfirmed, its status changes to "confirmed" ("actual") after creating a real PNR or after requesting price update within Nemo Connect web services (before creating a PNR). | empty = any flights 1 — flight in the PNR or its price is checked in advance 0 — flight has just been retrieved from search results |
0 1 |
availability of VC segments for all fares | valSegmentsInTariff | Verification: any fare segment must have a validating carrier segment (minimum one). | empty or 0 = any fares 1 - condition must be met |
0 1 |
service classes | serviceClass | Permissible service class categories.
Input options (one- or two-letter values are entered):
where the CODE:
|
empty = any - one or more values (see description) |
B,E F EB,EF,F |
booking classes (codes) | bookingClass | Allowed letters (one-letter codes) of booking classes. Must be Latin letters, Cyrillic letters are allowed only for Sirena supplier rules.
Input variants:
|
empty = any - one or more values (see description) |
A,B,C <>A,B,C |
carriers and classes | airlinesAndClasses | Set of "marketing carrier" + "booking class" pairs of any segment of the route.
Permissible input options:
|
empty = any - one or more values (see description) |
SU:A,LH:B,BA:C SU:A,LH:B! |
zones | zones | Geographical zones of the flight. The whole flight must not exceed one of the specified zones for the rule to be triggered. division of countries by specified zones.
the flight must be in both zones ("EUSA, EUNA" - transatlantic flight):
Only the listed zone combinations are allowed! |
empty = any - one or more values |
AS,EU SA EUSA, EUNA |
country zone | countryZones | The above country codes form an area beyond which an aircraft must not land and take off. | empty = any CODE,CODE... |
RU,IT,DE,FR |
countries of departure | depCountries | Permissible countries of departure for the flight (only the country of departure of the first segment of the route is checked). | empty = any CODE,CODE... <>CODE,CODE...(except for) |
RU <>LV,LT |
countries of destination | arrCountries | The destination country is checked (for OW and CR: this is the last country of the last segment, for RT: this is the last country of the first leg of the route). For example, for MOW-PAR-MOW flight, the destination country is FR, for MOW-PAR-LON - GB. Country of departure=RU, country of destination=RU does not mean a local flight - do not forget to specify the flight type DA. | empty = any CODE,CODE... <>CODE,CODE...(except for) |
RU <>LV,LT |
direct flight | isDirect | Direct flight attribute | empty = any 0 — only with transfers 1 — direct only additionally: |
0 1 |
route type | routeType | You can leave the field blank or specify a single value:
|
empty = any CODE (see examples) |
OW RT CR |
routes | routeFull | Chain of IATA codes of cities or airports, describing the entire route of the flight, taking into account transfers, without breaks and repetitions. Always use the IATA code of the city, if it is available (aggregation airport). For example, a VKO-ORY, ORY-VKO flight is turned to the MOW-PAR-MOW route. | empty = any CODE-CODE,CODE-CODE,... <>CODE-CODE,CODE-CODE,...(except for) |
MOW-LON,LON-MOW <>MOW-BER-PAR |
contains routes | routePart | Only part of the route compiled similarly to the previous one is specified. | empty = any CODE-CODE, -CODE-,... <>-CODE-,...(except for) |
-CAI- <>-PRG-,PRG-SVX |
routes (from airports) | routeAirportsFull | Use the codes of airports (not cities) in the IATA rule. The rest is similar to the "routes". | see "routes" parameter description. | see "routes" parameter description. |
contains routes (from airports) | routeAirportsPart | Use the codes of airports (not cities) in the IATA rule. The rest is similar to the "contains routes". | see "contains routes" parameter description. | see "contains routes" parameter description. |
departure (airports, cities) | depAirports | Only the departure airport of the first segment is checked. When you specify airport codes, you need an exact match. While specifying the codes of cities (aggregation of airports), the comparison is made according to the internal glossary of airports. It is recommended to specify the codes of specific airports. | empty = any CODE,CODE... <>CODE,CODE...(except for) |
MOW,PAR,BER <>VKO,LON |
arrival (airports, cities) | arrAirports | The airport of arrival is defined similarly to the "country of destination". The check for comparison is made similarly to "departure (airports, cities)". | empty = any CODE,CODE... <>CODE,CODE...(except for) |
MOW,PAR,BER <>VKO,LON |
start of flight | dateBegin | The departure date of the first segment must be greater than or equal to the specified date. | empty = ignored DD.MM.YYYY |
01.01.2012
31.01.2010 |
departure in (hours) | dateDepartureAfter | The maximum value or range of departure is set from the current date. For example, if you want to select flights no later than 5 days before departure, the range [0,120] shall be set. | empty = no restriction maximum value [X,X] — range |
13
[10,100] |
end of flight | dateEnd | The date of departure of the first segment should be less or equal to the specified date | empty = ignored DD.MM.YYYY |
31.12.2022 |
return not earlier than | dateBackBegin | The departure date of the last route segment should be greater than or equal to the specified date | empty = ignored DD.MM.YYYY |
31.12.2022 |
return not later than | dateBack | The departure date of the last route segment should be less than or equal to the specified date | empty = ignored DD.MM.YYYY |
31.12.2022 |
duration in days | daysDuration | Restriction on the maximum gap in days between the first flight date and the end of the route. You can specify a range.
Duration in days is calculated as a mathematical difference in dates. If the departure and return are in one day, the duration will be equal to 0 days. |
empty = no restriction number of days - maximum value (inclusive) [X,X] — range |
13 [3,13] |
days of the week | dayOfWeek | Permissible days of the week for the departure date of the route's first segment. Values are specified by the number corresponding to the order of the day of the week, starting from Monday. | empty = ignored 1 — Monday ... 7 — Sunday - one or more values |
2 3,5 |
passenger types | passengers | Permissible types of passengers on the flight. For the rule to work, all the listed types of passengers must be present in the flight. | empty = any ADT — adult CLD — child(2-12) INF — infant(0-2) INS — infant with seat (0-2) - one or more values |
INF ADT,CLD |
flight mask | Formalized flight description in text format, to create complex rules Will be added to the next version of the program |
|||
priority | priority | If several rules are triggered, one with the highest priority is selected. If there are several rules with the same priority (or no priority is specified), the newer rule is selected (located below in the imported table). | integral number empty = 0 |
1 2 |
promotional code | Unique promotion code. It is created in the Administration panel in the section Template:Menu | any set of letters/digits/symbols | 12022014_Promo | |
utm source | utmSource | Transition source ID, which is displayed in the "№" field of the transition sources table in the metric. Multiple sources are allowed. |
empty = any CODE,CODE... <>CODE,CODE...(except for) |
123,456 <>123,456 |
airline commission | commission | Agent's profit, received from the airline for sold tickets. The field required for filling in must strictly correspond to the value indicated in the contract. The value is transferred to the GDS upon ticketing. It can be specified in percentage of the fare or in absolute value. Commission is always calculated for each passenger.
Rules with specified zero commission have higher priority over rules with empty commission. |
"xxxCODE" (currency code) or "XX%" | 100RUB 13% |
subagent commission | agencyCommission | Commission to a subagent is a part of the airline's profit which the agent sends to the subagents. The value of the commission acts as a discount for subagents, reducing the price of air tickets. Commission is always calculated for each passenger fare is not equal to 0.
Commission assignment formats for subagents: For all subagents:
For selected subagents or groups of subagents:
In one rule, you can combine the commission for all subagents and the commission for the specified subagents in a format:
|
see description | 100RUB
|
segmental commission calculation | modeForSegment | Attribute of commission or bonus being applied for each flight segment. For example, 100 rubles for each flight segment. | empty = 0 0 — there is one commission for the entire flight 1 — commission should be multiplied by the number of segments |
0 1 |
airline bonus | bonus | Additional agent profit that the agency receives from the airline, but it is not taken into account in requests to the GDS. It is set and calculated in the same way as commissions (the parameter "segment commission calculation" is taken into account when calculating). It is used to calculate the "profitability" of air travel, affects the mixer and can affect the fee when setting the "minimum profit" parameter.
Of all the triggered rules, the bonus will be taken into account only from one by the following priority:
|
"xxxCODE" (currency code) or "XX%" | 100RUB 13% |
segment bonus (allowed for airlines) | modeForAirlines | Setting the current parameter forcibly enables the mode of bonus calculation for each flight segment (for absolutely specified bonus), but only segments with validating or interline carriers from the list specified here are taken into account. | empty CODE (airline code) CODE,CODE... |
SU SU,FV |
agency charge | charge | All markups/discounts that will be applied to the flight described by the rule are specified here. You can specify several price rules in one field by dividing them by user types. format = (subject:sum), (subject:sum), (subject:sum)...
Examples:
If several price rules, listed by comma, are triggered, their amount is taken. If this is not suitable behavior, divide the price rules into separate flight rules (rows), they can be adjusted by priority. Attention! In case you plan to create a large number of individual pricing rules for your agency, each of which will specify the value of the agency fee for individual subagents / groups / users, the recommended form of entry is as follows: (12345,12346,12347:3%) instead of (12345:3%), (12346:3%), (12347:3%). Which means using a grouping of the same values. If you need to enter the amount as a decimal fraction, the fraction is separated with "." , for example: |
see description | see description |
Metasearch commission | MetasearchCommission | Commission, charged by the meta-search system (for Websky at the moment it is only Aviasales) and calculated at the search stage. The value should be specified as decimal representation of the interest rate - it is a fraction of 1, for example, if you set 0.05 - 5%. It is possible to specify with/without the sign "%". Commission is calculated from the amount = flight price from supplier + fees/discounts + additional fees + min. profit. The calculated value is rounded to 2 characters after the separator. | see description | 0.05
0.025% |
extra charge attribute | chargeExt | The setting allows you to change the charge calculation procedure by adding additional calculation rules to the final result.
|
empty = 0 1 |
0 |
minimum profit | minProfit | Minimum profit that the agency will receive for the order. If the calculated agency profit is less than the minimum profit, the fee will be increased to the required value.
The format is similar to that of an agency. For calculations, the value from the rule by which the airline commission will be determined will be applied. If you need to change this behavior, you should set the "priority of the min. profit" parameter (see below). |
see description | 50RUB*LEG*PAS |
minimum profit priority | minProfitPriority | An additional parameter responsible for calculating the minimum profit. The rule with the highest priority will be triggered, if the priority matches, the rule below will be used. | Positive numeric values. | 1, 2, ... |
roundoff | chargeRounding | The procedure of arithmetic rounding of the charge | empty = 0, 0 = to integer vaue, 0.1 = to tenths, 0.01 = to hundredths |
0.1 0.01 |
Additional rule parameters for Websky platform
Parameters for working with private (confidential) fares.
To view the options description expand the table:
additional rule parameters | ||||
Title |
Internal name |
Description |
Permissible values |
Examples |
---|---|---|---|---|
tour code | gdsTourCode | Тур код |
any value On the example of Amadeus: if it is not necessary to specify PAX (passengerType), we specify only the RU084P tourcode, before the tourcode on the supplier side, * (asterisk) is always added, and the entered command in the terminal looks as FT *RU084P. If it is necessary to specify PAX (passengerType), you need to to specify it with the tourcode without space PAXRU084P, in the terminal, the entered command looks like FT PAX *RU084P. |
15ZU RU084P |
ticket designator | gdsTicketDesignator | Ticket designator |
any value | PP08 |
endorsement | gdsEndorsment | Endorsements |
any value or %VAT_VALUE% to transfer the value of VAT in the endorsement only for GDS Amadeus, Sabre, Galileo, GalileouAPI and S7 NDC; for Sabre, the value is transferred to the GDS, but not to the Itinerary Receipt |
Non-Endorsable/Valid on BA/IB only/Refund only to issuing agent; %VAT_VALUE% |
agent's own profit | comAgentProfit | Agent's own profit |
"xxxCODE" (currency code) or "XX%" Only integer values are allowed | 100RUB 2% |
tour code discount subject | corpClient | ID of the subject who will be given a discount on the tourcode | ID,ID
<>ID,ID |
2772,2653
<>2786,2361 |
discount by tourcode | discount | Discount |
"xxxCODE" (currency code) or "XX%" | 100RUB 13% |
authorisation code | authCode | Authorisation code |
any value | MB10 |
EMD
EMD - electronic multi-purpose document or voucher. In the section "Product control → Avia tickets → Pricing → Settings", there is an option Issue EMD by order charge value. It is responsible for issuing the EMD for the agency's charge (available only to Sirena Travel). Principle of operation: if, for the agency which buys the ticket there is an agency charge in the pricing rules for the validating air carrier company, then, when issuing an order in addition to the itinerary receipt and EMD for additional services, a separate EMD will be issued for agency charge . If there are several people in the order, the charge will be divided between them, the total amount of the fee will not be increased.