From adbe16989c40cf62e165f8ef0abb6d4f4a845519 Mon Sep 17 00:00:00 2001 From: Priec Date: Mon, 27 Jul 2026 00:10:57 +0200 Subject: [PATCH] custom ECB sql file --- common/proto/ecb.proto | 24 +++++++++++++++++++++++- common/src/proto/descriptor.bin | Bin 132662 -> 134667 bytes common/src/proto/komp_ac.ecb.rs | 30 +++++++++++++++++++++++++++++- 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/common/proto/ecb.proto b/common/proto/ecb.proto index e388e66..25279d3 100644 --- a/common/proto/ecb.proto +++ b/common/proto/ecb.proto @@ -36,6 +36,11 @@ message PreviewEcbConversionRequest { // ISO calendar date (YYYY-MM-DD). Its meaning is selected by // conversion_context: transaction, statement, or decisive date. string anchor_date = 4; + + // Required. Profile whose custom exchange rate table is consulted before the + // ECB observations, so the preview matches what posting into that profile + // would do. + string profile_name = 5; } // The conversion and immutable local ECB observation that would be used now. @@ -56,6 +61,14 @@ message PreviewEcbConversionResponse { optional string rate_fetched_at = 13; optional int64 import_batch_id = 14; optional string source_endpoint = 15; + + // Present only when determination_method is custom_rate. rate_date and + // units_per_eur then describe the hand-entered row identified here, and the + // ECB observation fields above are empty. + optional int64 custom_rate_table_definition_id = 16; + optional int64 custom_rate_record_id = 17; + optional int64 custom_rate_row_revision = 18; + optional string custom_rate_note = 19; } // Identify one logical money cell whose conversion history should be inspected. @@ -102,10 +115,19 @@ message EcbConversionEvidence { optional int64 import_batch_id = 16; optional string source_endpoint = 17; string evidence_created_at = 18; + + // Present only when determination_method is custom_rate. The hand-entered row + // that supplied rate_date and units_per_eur. The row itself stays editable, so + // the figures above are the immutable record of what was actually applied. + optional int64 custom_rate_table_definition_id = 19; + optional int64 custom_rate_record_id = 20; + optional int64 custom_rate_row_revision = 21; + optional string custom_rate_note = 22; } message ListEcbConversionEvidenceResponse { - // True when at least one evidence row for this cell used an ECB rate. + // True when at least one evidence row for this cell used a rate, whether it + // came from ECB or from a hand-entered custom row. bool has_exchange = 1; // Newest-first immutable history for this page. diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index bc4d21709a00c07796187507e5dfa373677e79d8..0e288a4890112ff76ddc2ffe233b2919cc1575c1 100644 GIT binary patch delta 4710 zcmd6qO-vlg702nS0cL9Wn&!g;tnD)X#ux*(`NmNU_)El&M=M8OJ7Nc>fwpI+hwdJe z0X8k+Wwk3?xy)_lMC)TNQC3zGDatLEJ>}z+Q=(jQ$Sv6%a?QWGUl%6YlXJ;!UcdK# z_4-xK`*;2FW%9+VQ(ciq?X)W|wW>cFMO4pBjcaF1p{& zb*)v$EiBuGY$gPxa^?Xb7doT7S&==I=WH#z)-&4!IBQDdJ6K%g2(1>+Ia@jMt7R{W zjN#M*TMAxA(!7y^40q+7xW9E>g!q2b0|i?&-H%M zd)V_<#n(GU=8#j>GqA^mT(UiXadlmw$81RsH`{%e&sa<=yYr z@}B>*mcKT{iG!BE`Qq6JO#F0IG@FeL4WAirc#W&DOKxpAo+YCrBds5-Zsg1BmQ?={8J-aXGrNzYLpSy6}F+LER9yuZ3(c~~Rw%ZlUqc6nXeWnYD< zCs7GPZaLLrK^B~0AzDPED!5TqoQy34R;oL;IIL{1cx4EdFwDfIhMV=D{P0z9DS1ky z@wx_UF!=~O8ivCFYJ^a*fEr0{qIp4T%+tbxeTO@>NNZr`Dm&y_91Qb=rKxT zCLd#25va-y#*jCr^BD5RQk|5?kT=$Igz{iqX2ay-P0H$tEu>vOaz3_H|b#kR%|J8j>{3fKQt7<|RRy95_jol*y;qAW>4FOle9Al&N$_>_aJ2nRvYv zAX8`06GWJNnw_IS0m!t52tcOOLHt4jlxZ{Wv;bxL^jV^$O+Lde5G4)DjHaYPnb9wl z24u!O9Y+E(b8e6zEhe93XUWw9$gF|{;qhw$WmZ#KK$$g9#G#`(iQByLYENV&yl*LRuVltpC z4h>T&rpa&Uvu*-%LqkkJZs<)l0l7g(z01HLgo(5M2!olKi8~G7um5xJQQMv5IWdmv zm>SGW^$(s;4ldCU!6P7+Xtu)wVF|PSTVXg{_v*iS{_VkgI$RCndo)lPGZ20c19dnI z$NIVY*^fsqz7huwyyJ3Z`Wz35s0*Pl1{Gb+8}X(5n7R!!9vD&wDa&G&(=+WmOUZq!(P_;{dqUC)AJU$X zbaDpuda8RFD8YKF^B`FKscxpytEak|(5oVghBjwPuZnbnU;$F3zaK0>iX@$|04W}m zbX=fUB^K!iXV9wvW+cEcK`Cj9(yJ0lCw!ok2BI%1&Y)Lil1>;XrK}-JugY|o;RB>h z(g_QYGD#6JtC1d*UPB%Pc=uPP*+FaW7&h|;TyhA6$N zkaQvvkP4(TP@jgJL9jMSuwa0)sVPdYHZ?`*)h6i`B0EueTT#`;0fVdi>=Dn-C zqUOCDNoRn?+d*+jJ2|eT+|#9~f$wRG8u*?rMGbsUm!bx~r%S=S_w~_K6W-THOig${ z^&U-(K#h3+_zCeZHT*ckjITj*|Mt$3`#wJO|64{y^j+^&E0v;>Qgw?URSux1hg5l3 zDnh8ezGoHJr03^rp0o;fcCm`Dz z(h0~msWT!0*;eW-!uiu>@*PrV&bmO^(UdMwb~L36lpRuMM1rzI>daZU$#+SeVF0qL zA>DxN>T}Z#$Zq^^8e`p{?1q0QmPnY50q%;15Q5_a%;Z7xym+BbMgl^U*fUtR@1y$C zi>V;o!y)x4hOWEP_Jv%{m#{0YQ;KeYZuC2U_%zUk68nqhw?ec4ZVbsyv5C9ep3&SH zn^3(y10#MetOCw`gALcedNFo0N;eYWqnKtiDKjl89ij&F#QE3+ZQsD9>3bm!`~Im> kpM80EFk(SL@PNgoK-yq7w^K6Y4CeDMU;gULm&ShWKl2dqDgXcg delta 2754 zcmX|@OK%)S6osd6wP(6(?D0$`P8>T<#*Uxk_j`;;EIS$@Bg0@~;rIK6A}1Dh7DQgO zFiMofSs=<15^@t3`>h=0I}B@YRS6)e~w{s5fnzFoVV)IDF_zTNkDPS3sXUV7gy zJfJ`B=%okO+&>*zuj`KMwSMrUX!<94aq{pd(p#Utu4p$bqfP z+8lG{*TrYBbv4{z8!6FEwK9mVBlx%MZ8eGom=!$%@%)RkDl)^oKZ zR;IG6n{BQVy>yL_T-??h-4@_kF%Hq|Uycvq>%CgbK2-Km6CYKCDjrG&Y<+$_unO4v z@{MdmU;TELN!a@B!zE$sx3dhA@b%karj!_3jG>h!tS~9} zcH#ql@@y${+iRC2SYa|NJg)zKRxFJ3=Z60RVcf3?JB9*by!M(L56f{hso#4(QJA#l zW@RUN^@tplPh$0Y!g8!^Nq_&mud_rc=9x_`dC@y0GMieuTqD1B!g{DFed)z{VannK z>Zf?sP;M%)YUQvTW0=;zzL+UYTfEuKX|IYeb5TB>&B=Gea?Gi$XHTb#Wu6_8+0Qb+ z0VtTuxm#>D`&n*nlQWo|Q0~3N$NHDknbJM4A$%#q%x)HeWbz0Cq*-nQ3Zz*t$|ER{ zW-*j^(1tJrn9~nmP6cze+{|#!i}C~oD4*jz5ri4eb1*>QmU*5H6m0Vx3{bGmb1n!Y z7C2-fU|X;@GtvdWF5u41Ocyw11!1O(_MuGdEn1(M?IOQv6vDR1AuCK@OB_QGp^8!u z3brLb3LYrfmcrl(%rFpp%bcezf=sfl@fQRI$Qo}S6d-FHvQU7m z-N^Ijf@E8#C}{*C*#gKYsv$vHw-l3X>m0H;17*D_`kN~V$+p2E3xQTPEW{++27k;r z17w3k77CCJ4p~7+woMA6l!XFi(^5>bZQ52$vTbt6q7sx%4p~7+wk-}>2tc+h#3b96 zg_va9;*dopAX^C8!2F01glOC5XoCP{+fq!jZCi>-wrx%}RD!b2AuFg_i5(7E2tal$ zq#BSNJC$lccA}6CaCtQ-JDjqDvP$gQR6#k84t9pK9w$`u8u# zCLZQXcPI0Q8;^E+qE83sxMH7@AruPU{Zte@P`F_qJNkA=!qI`&dT7!lmP-yE@PHo> z3Y&P4j{f>UncBwahY=Jo2l!$1QHVhx9qP>4`)v`%tp1_B-$c@3s+zkoDRlVx)3Y~E J&zvWZ{|BAr<|P0C diff --git a/common/src/proto/komp_ac.ecb.rs b/common/src/proto/komp_ac.ecb.rs index 0f485a3..82349c5 100644 --- a/common/src/proto/komp_ac.ecb.rs +++ b/common/src/proto/komp_ac.ecb.rs @@ -13,6 +13,11 @@ pub struct PreviewEcbConversionRequest { /// conversion_context: transaction, statement, or decisive date. #[prost(string, tag = "4")] pub anchor_date: ::prost::alloc::string::String, + /// Required. Profile whose custom exchange rate table is consulted before the + /// ECB observations, so the preview matches what posting into that profile + /// would do. + #[prost(string, tag = "5")] + pub profile_name: ::prost::alloc::string::String, } /// The conversion and immutable local ECB observation that would be used now. /// No rounding is performed and no conversion evidence is persisted. @@ -48,6 +53,17 @@ pub struct PreviewEcbConversionResponse { pub import_batch_id: ::core::option::Option, #[prost(string, optional, tag = "15")] pub source_endpoint: ::core::option::Option<::prost::alloc::string::String>, + /// Present only when determination_method is custom_rate. rate_date and + /// units_per_eur then describe the hand-entered row identified here, and the + /// ECB observation fields above are empty. + #[prost(int64, optional, tag = "16")] + pub custom_rate_table_definition_id: ::core::option::Option, + #[prost(int64, optional, tag = "17")] + pub custom_rate_record_id: ::core::option::Option, + #[prost(int64, optional, tag = "18")] + pub custom_rate_row_revision: ::core::option::Option, + #[prost(string, optional, tag = "19")] + pub custom_rate_note: ::core::option::Option<::prost::alloc::string::String>, } /// Identify one logical money cell whose conversion history should be inspected. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] @@ -112,10 +128,22 @@ pub struct EcbConversionEvidence { pub source_endpoint: ::core::option::Option<::prost::alloc::string::String>, #[prost(string, tag = "18")] pub evidence_created_at: ::prost::alloc::string::String, + /// Present only when determination_method is custom_rate. The hand-entered row + /// that supplied rate_date and units_per_eur. The row itself stays editable, so + /// the figures above are the immutable record of what was actually applied. + #[prost(int64, optional, tag = "19")] + pub custom_rate_table_definition_id: ::core::option::Option, + #[prost(int64, optional, tag = "20")] + pub custom_rate_record_id: ::core::option::Option, + #[prost(int64, optional, tag = "21")] + pub custom_rate_row_revision: ::core::option::Option, + #[prost(string, optional, tag = "22")] + pub custom_rate_note: ::core::option::Option<::prost::alloc::string::String>, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct ListEcbConversionEvidenceResponse { - /// True when at least one evidence row for this cell used an ECB rate. + /// True when at least one evidence row for this cell used a rate, whether it + /// came from ECB or from a hand-entered custom row. #[prost(bool, tag = "1")] pub has_exchange: bool, /// Newest-first immutable history for this page.