source: observatorio/simulacion/ModuloDinamico/queries.H @ 4b459a7

simulacion
Last change on this file since 4b459a7 was 4b459a7, checked in by Alejandro <amujica@…>, 9 years ago

Modulo de calculo de divisas por producto y envoltorio python

  • Property mode set to 100644
File size: 11.3 KB
Line 
1/*
2  Copyright (C) 2014
3  Alejandro Mujica (amujica@cenditel.gob.ve)
4  José Ruiz (jruiz@cenditel.gob.ve)
5  Julie Vera (jvera@cenditel.gob.ve)
6 
7  CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en
8  Tecnologías Libres
9 
10  Este programa es software libre; Usted puede usarlo bajo los términos de la
11  licencia de software GPL versión 2.0 de la Free Software Foundation.
12 
13  Este programa se distribuye con la esperanza de que sea útil, pero SIN
14  NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o
15  ADECUACIÓN A UN PROPÓSITO PARTICULAR.
16  Consulte la licencia GPL para más detalles. Usted debe recibir una copia
17  de la GPL junto con este programa; si no, escriba a la Free Software
18  Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
19*/
20
21/*
22  Autor:             Alejandro J. Mujica
23  Fecha de creación: 12/06/2014
24  Este archivo contiene la definición de cabeceras para las diversas consultas
25  a base de datos efectuadas.
26*/
27
28# ifndef QUERIES_H
29# define QUERIES_H
30
31# include <product.H>
32# include <input.H>
33
34struct DB
35{
36  // Nombres de tablas
37  static const std::string PRODUCT_TABLE_NAME;
38  static const std::string INPUT_TABLE_NAME;
39  static const std::string PLANT_TABLE_NAME;
40  static const std::string COMPANY_TABLE_NAME;
41  static const std::string COMPANY_ACTIVITY_CIIU_TABLE_NAME;
42  static const std::string PRODUCT_INPUT_TABLE_NAME;
43  static const std::string MEASUREMENT_UNIT_TABLE_NAME;
44  static const std::string INPUT_SUPPLIER_TABLE_NAME;
45  static const std::string SUPPLIER_TABLE_NAME;
46  static const std::string PRODUCTION_QUANTITIES_TABLE_NAME;
47  static const std::string ACQ_PRICE_TABLE_NAME;
48  static const std::string COUNTRY_TABLE_NAME;
49  static const std::string PARISH_TABLE_NAME;
50  static const std::string TOWN_TABLE_NAME;
51  static const std::string STATE_TABLE_NAME;
52  static const std::string COMPANY_OCCUPANCY_TABLE_NAME;
53
54  // Nombres de campos
55  static const std::string ID;
56  static const std::string NAME;
57  static const std::string COMPANY_NAME;
58  static const std::string TECHNICAL_SPECIFICATION;
59  static const std::string TARIFF_CODE;
60  static const std::string MEASUREMENT_UNIT_ID;
61  static const std::string TRADEMARK;
62  static const std::string PLANT_ID;
63  static const std::string CODE;
64  static const std::string PARISH_CODE;
65  static const std::string TOWN_CODE;
66  static const std::string STATE_CODE;
67  static const std::string COMPANY_RIF;
68  static const std::string UE_RIF;
69  static const std::string RIF;
70  static const std::string NATIONALITY;
71  static const std::string WORKDAY;
72  static const std::string ACQ_PRICE;
73  static const std::string NAC_ACQ_PRICE;
74  static const std::string CIIU_ID;
75  static const std::string ACTIVE;
76  static const std::string MAIN;
77  static const std::string INPUT_ID;
78  static const std::string PRODUCT_ID;
79  static const std::string SUPPLIER_ID;
80  static const std::string PRODUCED_QUANTITY;
81  static const std::string PRICE;
82  static const std::string BOUGHT_QUANTITY;
83  static const std::string QUANTITY;
84  static const std::string ORIG_COUNTRY_ID;
85  static const std::string PROC_COUNTRY_ID;
86  static const std::string YEAR_R;
87  static const std::string YEAR;
88  static const std::string USED_CAPACITY;
89  static const std::string INSERTION_DATE;
90  static const std::string OPERATING;
91  static const std::string ADMINISTRATIVE;
92};
93
94/** Encierra una cadena entre comillas simples.
95 *
96 * Utilizada para los campos de tipo cadena que se almacenan en base de datos.
97 *
98 * @param str cadena que se va a encerrar entre comillas simples.
99 * @return cadena encerrada entre comillas simples.
100 */
101std::string single_quote(const std::string & str);
102
103/** Encierra una cadena entre comillas dobles.
104 *
105 * @param str cadena que se va a encerrar entre comillas simples.
106 * @return cadena encerrada entre comillas simples.
107 */
108std::string double_quote(const std::string & str);
109
110/** Concatena dos cadenas mediante un conector.
111 *
112 * Útil para concatenar nombres de tablas con nombres de campos.
113 * Ej: estudiante.id.
114 * 
115 * @param table nombre de la tabla.
116 * @param field nombre del campo.
117 * @param connector caracter que conectará a las dos cadenas.
118 * @return cadena concatenada.
119 */
120std::string concat(const std::string & table, const std::string & field,
121                   const char & connector = '.');
122
123/** Concatena "campo AS alias"
124 *
125 * @param field nombre del campo de la tabla.
126 * @param alias alias que se le asignará al campo.
127 * @return cadena concatenada.
128 */
129std::string as(const std::string & field, const std::string & alias);
130
131/** Concatena "tabla.campo AS alias"
132 *
133 * @param table nombre de la tabla.
134 * @param field nombre del campo de la tabla.
135 * @param alias alias que se le asignará al campo.
136 * @return cadena concatenada.
137 */
138std::string concatas(const std::string & table, const std::string & field,
139                     const std::string & alias);
140
141/** Concatena tabla y campo de la forma tabla.campo AS tabla_campo
142 *
143 * @param table nombre de la tabla.
144 * @param field nombre del campo de la tabla.
145 * @return cadena concatenada.
146 */
147std::string concatas(const std::string & table, const std::string & field);
148
149/** Concatena una operación de comparación para base de datos.
150 *
151 * @param field nombre del campo.
152 * @param value valor con el cual se va a comparar el campo.
153 * @param oper operador de comparación (=, <, <=, >, >= <>)
154 */
155std::string op(const std::string & field, const std::string & value,
156               const std::string & oper = "=");
157
158/** Convierte un campo id (de tipo long) en cadena.
159 *
160 * @param id valor numérico del id.
161 * @return valor del id convertido en cadena.
162 */
163std::string id_to_str(const db_id_t & id);
164
165
166/** Concatena la operación field BETWEEN beg AND end (para fechas).
167 *
168 * @param field nombre del campo a evaluar.
169 * @param beg valor mínimo de comparación.
170 * @param end valor máximo de comparación.
171 * @return cadena concatenada.
172 */
173std::string between(const std::string & field, const std::string & beg,
174                    const std::string & end);
175
176/** Dados un campo y un año (en cadena), efectúa la operación between entre
177 *  el primer y el último día del año.
178 *
179 * @param field nombre del campo que se va a comparar.
180 * @param year valor del año.
181 * @return cadena concatenada.
182 */
183std::string in_year(const std::string & field, const std::string & year);
184
185/** Extrae de la base de datos toda la información de un producto con id dado.
186 *
187 * @param id id del producto que se quiere consultar.
188 * @return Objeto Product con toda la información del producto consultado.
189 */
190Product load_product_by_id(const db_id_t & id);
191
192/** Carga la lista de id de los insumos para un producto dado.
193 *
194 * @param[in] product_id id del producto.
195 * @param[in] year año de declaración de la matriz.
196 * @param[out] input_ids Lista en la cual se almacenarán los ids.
197 */
198void list_input_ids(const db_id_t & product_id, const std::string & year,
199                    List<db_id_t> & input_ids);
200
201/** Carga a todos los proveedores de un insumo dado.
202 *
203 * @param[in] input_id id del insumo.
204 * @param[in] year año de la venta del insumo.
205 * @param[out] Lista de proveedores del insumo.
206 */
207void list_inputs(const db_id_t & input_id, const std::string & year,
208                 List<Input> & inputs);
209
210/** Dado un proveedor, obtiene todos los posibles productos asociados a ese
211 *  proveedor que coincidan con el mismo código arancelario.
212 *
213 * @param[in] input información del insumo.
214 * @param[out] products Lista de productos asociados al insumo.
215 */
216void product_from_input(const Input & input, List<Product> & products);
217
218/** Consulta la candidad de insumo requerida para producir una unidad de
219 *  producto.
220 *
221 * @param inputId id del insumo.
222 * @param productId id del producto.
223 * @return cantidad de insumo para producir una unidad de producto.
224 */
225real get_unitarian_request(const db_id_t & input_id,
226                           const db_id_t & product_id);
227
228/** Consulta el precio declarado de compra para un insumo el cual no está
229 *  registrado en el sigesic como un producto.
230 *
231 * @param nationality Nacionalidad de la unidad económica productora del insumo.
232 * @param input_id id del insumo.
233 * @param year año de declaración de la compra.
234 * @return precio de compra del insumo.
235 */
236real get_acquisition_price(const std::string & nationality,
237                           const db_id_t & input_id,
238                           const std::string & year);
239
240/** Consulta la cantidad que un comprador declara que obtiene de un proveedor.
241 *
242 * @param rif R.I.F. del proveedor.
243 * @param company_name Nombre del proveedor para el caso de extranjeros.
244 * @param input_id id del insumo.
245 * @param year año de la compra.
246 * @return cantidad de insumo declarado.
247 */
248real get_declared_bought_quantity(const std::string & rif,
249                                  const std::string & company_name,
250                                  const db_id_t & input_id,
251                                  const std::string & year);
252
253/** Consulta la cantidad producida y el precio de venta declarado de un producto.
254 *
255 * @param product_id id del producto.
256 * @param year año de declaración de la producción.
257 */
258Aleph::pair<real, real>
259get_produced_quantity_and_price(const db_id_t & product_id,
260                                const std::string & year);
261
262/** Carga la lista de todos los productos que utilizan como insumo un producto
263 *  dado.
264 *
265 * @param[in] good bien del cual se requieren los que lo usan.
266 * @param[out] list Lista sobre la cual se escribirán los productos que lo usan
267 *              junto al id que se le asocia como insumo a good por cada uno.
268 */
269void list_requesters(Good * good, List <Aleph::pair<Product, long>> & list);
270
271/** Consulta la capacidad usada de producción de la planta distribuida a un
272 *  producto dado.
273 *
274 * @param product_id id del producto el cual se quiere consultar.
275 * @param year año de declaración de la producción.
276 * @return capacidad máxima de producción para el producto.
277 */
278real get_product_used_capacity(const db_id_t & product_id,
279                               const std::string & year);
280
281/** Consulta información laboral de la empresa, como lo son: jornada laboral y
282 *  cantidad de personal operativo y administrativo distribuidos por producto.
283 *
284 * @param rif R.I.F. de la empresa.
285 * @param year Año del estudio.
286 * @param product_id id del producto.
287 * @return Par ordenado con ambos resultados.
288 */
289std::tuple<real, real, real>
290get_product_staff_numbers(const std::string & rif,
291                          const std::string & year,
292                          const db_id_t & product_id);
293
294/** Obtiene el monto obtenido por las empresas fuera de la red en la venta de
295 *  un producto.
296 *
297 * @param tariff_code Código Arancelario del producto en estudio.
298 * @param seller_rif R.I.F. de la empresa productora del producto.
299 * @param year Año de declaración de la compra-venta.
300 * @param buyers_to_exclude Cadena que contiene los R.I.F.s de los compradores a
301 *                          excluir en el cálculo, es decir, los que están
302 *                          dentro de la red.
303 * @return El monto total en Bs obtenido por la empresa por los compradores que
304 *         no están en la red.
305 */
306real get_external_sales(const std::string & tariff_code,
307                        const std::string & seller_rif,
308                        const std::string & year,
309                        const std::string & buyers_to_exclude);
310
311# endif // QUERIES_H
312
Note: See TracBrowser for help on using the repository browser.