*fintekkers/models/util/decimal_value.protofintekkers.models.util"O DecimalValueProto: arbitrary_precision_value ( RarbitraryPrecisionValueJ         " uint32 scale = 1;    (}This is a string representation of a float number. This will be deprecated in the future for a more space efficient approach 2@An integer serialized in little endian form. bytes value = 3;    "  %'bproto3  'fintekkers/models/util/local_date.protofintekkers.models.util"L LocalDateProto year ( Ryear month ( Rmonth day ( RdayJ                     bproto3 1 google/protobuf/timestamp.protogoogle.protobuf"; Timestamp seconds (Rseconds nanos (RnanosB com.google.protobufBTimestampProtoPZ2google.golang.org/protobuf/types/known/timestamppbGPBGoogle.Protobuf.WellKnownTypesJ/   2 Protocol Buffers - Google's data interchange format Copyright 2008 Google Inc. All rights reserved. https://developers.google.com/protocol-buffers/ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     "; %";  # #  $I  $I  %, %,  &/ &/  '"  '"  (! $(!   A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one. All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear). The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. # Examples Example 1: Compute Timestamp from POSIX `time()`. Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0); Example 2: Compute Timestamp from POSIX `gettimeofday()`. struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000); Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. long millis = System.currentTimeMillis(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build(); Example 5: Compute Timestamp from Java `Instant.now()`. Instant now = Instant.now(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(now.getEpochSecond()) .setNanos(now.getNano()).build(); Example 6: Compute Timestamp from current time in Python. timestamp = Timestamp() timestamp.GetCurrentTime() # JSON Mapping In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset). For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017. In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D ) to obtain a formatter capable of generating timestamps in this format.    Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.      Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.   bproto3  ,fintekkers/models/util/local_timestamp.protofintekkers.models.utilgoogle/protobuf/timestamp.proto"l LocalTimestampProto8 timestamp ( 2.google.protobuf.TimestampR timestamp time_zone ( RtimeZoneJ        )    *  % ()  "TODO: Need to decide how to model this: https://en.wikipedia.org/wiki/List_of_time_zone_abbreviations https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html    bproto3  !fintekkers/models/util/uuid.protofintekkers.models.util"& UUIDProto raw_uuid ( RrawUuidJk              bproto3 +fintekkers/models/portfolio/portfolio.protofintekkers.models.portfolio,fintekkers/models/util/local_timestamp.proto!fintekkers/models/util/uuid.proto" PortfolioProto! object_class ( R objectClass version ( Rversion5 uuid ( 2!.fintekkers.models.util.UUIDProtoRuuid@ as_of ( 2+.fintekkers.models.util.LocalTimestampProtoRasOf is_link (RisLinkJ valid_from ( 2+.fintekkers.models.util.LocalTimestampProtoR validFromF valid_to ( 2+.fintekkers.models.util.LocalTimestampProtoRvalidTo% portfolio_name ( R portfolioNameBBPortfolioProtosPJ      $ 6 +  "  "   0  0        1-4 reserved             , Primary Key " #' *+ 7 , -2 56     *  % () (  # &'     bproto3 )fintekkers/models/strategy/strategy.protofintekkers.models.strategy,fintekkers/models/util/local_timestamp.proto!fintekkers/models/util/uuid.proto" StrategyProto! object_class ( R objectClass version ( Rversion5 uuid ( 2!.fintekkers.models.util.UUIDProtoRuuid@ as_of ( 2+.fintekkers.models.util.LocalTimestampProtoRasOf is_link (RisLinkJ valid_from ( 2+.fintekkers.models.util.LocalTimestampProtoR validFromF valid_to ( 2+.fintekkers.models.util.LocalTimestampProtoRvalidTo# strategy_name ( R strategyNameA parent ( 2).fintekkers.models.strategy.StrategyProtoRparentBBStrategyProtosPJ      # 6 +  "  "   /  /                      , Primary Key " #' *+ 7 , -2 56     *  % () (  # &' ! Transaction details     7 * +1 46bproto3 4fintekkers/models/strategy/strategy_allocation.protofintekkers.models.strategy)fintekkers/models/strategy/strategy.proto,fintekkers/models/util/local_timestamp.proto*fintekkers/models/util/decimal_value.proto!fintekkers/models/util/uuid.proto" MapFieldEntry; key ( 2).fintekkers.models.strategy.StrategyProtoRkey? value ( 2).fintekkers.models.util.DecimalValueProtoRvalue" StrategyAllocationProto! object_class ( R objectClass version ( Rversion5 uuid ( 2!.fintekkers.models.util.UUIDProtoRuuid@ as_of ( 2+.fintekkers.models.util.LocalTimestampProtoRasOf is_link (RisLinkK allocations ( 2).fintekkers.models.strategy.MapFieldEntryR allocationsBBStrategyAllocationProtosPJ      # 3 6 4 +   "   "   9  9         #   !"               Primary Key    %   #$      *Map    $ ')bproto3  ;fintekkers/models/security/identifier/identifier_type.protofintekkers.models.security*u IdentifierTypeProto UNKNOWN_IDENTIFIER_TYPE EXCH_TICKER ISIN CUSIP OSI FIGI CASH2BBIdentifierTypeProtosPJ      #  "  "  5 5                                       bproto3  6fintekkers/models/security/identifier/identifier.protofintekkers.models.security;fintekkers/models/security/identifier/identifier_type.proto" IdentifierProto! object_class ( R objectClass version ( Rversion) identifier_value ( RidentifierValueX identifier_type (2/.fintekkers.models.security.IdentifierTypeProtoRidentifierTypeBBIdentifierProtosPJ     E  #  "  "  1 1                       Primary Key     *  % ()bproto3  2fintekkers/models/security/bond/auction_type.protofintekkers.models.security.bond*> AuctionTypeProto UNKNOWN_AUCTION_TYPE SINGLE_PRICEBBAuctionTypeProtosPJ       (  "  "  2 2               bproto3 % .fintekkers/models/security/bond/issuance.protofintekkers.models.security.bond2fintekkers/models/security/bond/auction_type.proto*fintekkers/models/util/decimal_value.proto'fintekkers/models/util/local_date.proto,fintekkers/models/util/local_timestamp.proto" IssuanceProto! object_class ( R objectClass version ( Rversion@ as_of ( 2+.fintekkers.models.util.LocalTimestampProtoRasOfJ valid_from ( 2+.fintekkers.models.util.LocalTimestampProtoR validFromF valid_to ( 2+.fintekkers.models.util.LocalTimestampProtoRvalidTob auction_announcement_date ( 2&.fintekkers.models.util.LocalDateProtoRauctionAnnouncementDateT auction_issue_date ( 2&.fintekkers.models.util.LocalDateProtoRauctionIssueDatet !post_auction_outstanding_quantity ( 2).fintekkers.models.util.DecimalValueProtoRpostAuctionOutstandingQuantitya auction_offering_amount ( 2).fintekkers.models.util.DecimalValueProtoRauctionOfferingAmountT auction_type (21.fintekkers.models.security.bond.AuctionTypeProtoR auctionTypem price_for_single_price_auction ( 2).fintekkers.models.util.DecimalValueProtoRpriceForSinglePriceAuctionP total_accepted ( 2).fintekkers.models.util.DecimalValueProtoR totalAccepted_ mature_security_amount ( 2).fintekkers.models.util.DecimalValueProtoRmatureSecurityAmountBBIssuanceProtosPJ m     ( < 4 1 8 6"- import "fintekkers/models/util/uuid.proto";  "   "2 import "fintekkers/models/security/identifier/identifier.proto"; import "fintekkers/models/security/security_type.proto"; import "fintekkers/models/security/security_quantity_type.proto"; import "fintekkers/models/security/coupon_frequency.proto"; import "fintekkers/models/security/coupon_type.proto";  / / 4m Issuance proto contains the following: - changes in outstanding quantities. - auction - auction date - issue date (note: original issue date is found on the base security) - announcement date - pre-auction outstanding quantity - offering amount - auction type (e.g. single price) - price (if single price auction) - award details, i.e. below. The above should apply to corproate issuance also 136650000000 32879650000 9525000000 3548785000 9055736500 8145454000 155230736500 44573889000 326458500 0 0 100000000 100000000 155657195000 45000347500 - tender offer - ? 4 5 5 5  5 6 6 6  6  :7~Primary Key not needed currently as these will be stored on the security object fintekkers.models.util.UUIDProto uuid = 5; " bool is_link = 7; :, :-2 :56 =< =, =-7 =:; >: >, >-5 >89 _ DGR* The date the auction was announced, has no bearing on the economics of the bond D' D(A DDF q J@d* The date of the issue relating to this auction, i.e. when the securities will be issued to buyers J' J(: J=? a ORT* The amount of this security that is outstanding in the market before this auction O* O+L OOQ  WH* The amount of bond issuance expected during this auction. This is an indicative amount and may not be the exact amount issued. For example in US Treasuries the amount issued to competitive bidders (e.g. primary dealers) might √ary from this number. Additional bonds may be bought by Federal programs such as SOMA/FIMA. W* W+B WEG H  \E;** The type of auction, see the enum for details on types.  \2  \3?  \BD \  aOO* If the auction was a single price auction, this is the price paid by bidders  a*  a+I  aLN F  f?9* The total amount of the security sold by this auction.  f*  f+9  f<> \  kGO* The amount of this security that will mature on the security's maturity date  k*  k+A  kDFbproto3  .fintekkers/models/security/security_type.protofintekkers.models.security*| SecurityTypeProto UNKNOWN_SECURITY_TYPE CASH_SECURITY EQUITY_SECURITY BOND_SECURITY TIPS FRNBBSecurityTypeProtosPJ      #  "  "  3 3     "Maps to Security                               bproto3  7fintekkers/models/security/security_quantity_type.protofintekkers.models.security*h SecurityQuantityTypeProto UNKNOWN_QUANTITY_TYPE ORIGINAL_FACE_VALUE NOTIONAL UNITSBBSecurityQuantityTypeProtosPJ      #  "  "  ; ;     "Maps to Security                      bproto3  1fintekkers/models/security/coupon_frequency.protofintekkers.models.security* CouponFrequencyProto UNKNOWN_COUPON_FREQUENCY ANNUALLY SEMIANNUALLY QUARTERLY MONTHLY NO_COUPONBBCouponFrequencyProtosPJ      #  "  "  6 6     "Maps to Security                              bproto3  ,fintekkers/models/security/coupon_type.protofintekkers.models.security*J CouponTypeProto UNKNOWN_COUPON_TYPE FIXED FLOAT ZEROBBCouponTypeProtosPJ       #  "  "  1 1      "Maps to Security                    bproto3  )fintekkers/models/security/security.protofintekkers.models.security*fintekkers/models/util/decimal_value.proto'fintekkers/models/util/local_date.proto,fintekkers/models/util/local_timestamp.proto!fintekkers/models/util/uuid.proto6fintekkers/models/security/identifier/identifier.proto.fintekkers/models/security/bond/issuance.proto.fintekkers/models/security/security_type.proto7fintekkers/models/security/security_quantity_type.proto1fintekkers/models/security/coupon_frequency.proto,fintekkers/models/security/coupon_type.proto" SecurityProto! object_class ( R objectClass version ( Rversion5 uuid ( 2!.fintekkers.models.util.UUIDProtoRuuid@ as_of ( 2+.fintekkers.models.util.LocalTimestampProtoRasOf is_link (RisLinkJ valid_from ( 2+.fintekkers.models.util.LocalTimestampProtoR validFromF valid_to ( 2+.fintekkers.models.util.LocalTimestampProtoRvalidToR security_type (2-.fintekkers.models.security.SecurityTypeProtoR securityType asset_class ( R assetClass issuer_name ( R issuerNameZ settlement_currency ( 2).fintekkers.models.security.SecurityProtoRsettlementCurrencyZ quantity_type (25.fintekkers.models.security.SecurityQuantityTypeProtoR quantityTypeK identifier( ( 2+.fintekkers.models.security.IdentifierProtoR identifier description) ( R description cash_id2 ( RcashIdJ coupon_rate< ( 2).fintekkers.models.util.DecimalValueProtoR couponRateL coupon_type= (2+.fintekkers.models.security.CouponTypeProtoR couponType[ coupon_frequency> (20.fintekkers.models.security.CouponFrequencyProtoRcouponFrequencyE dated_date? ( 2&.fintekkers.models.util.LocalDateProtoR datedDateH face_value@ ( 2).fintekkers.models.util.DecimalValueProtoR faceValueE issue_dateA ( 2&.fintekkers.models.util.LocalDateProtoR issueDateK maturity_dateB ( 2&.fintekkers.models.util.LocalDateProtoR maturityDateS issuance_infoC ( 2..fintekkers.models.security.bond.IssuanceProtoR issuanceInfoBBSecurityProtosPJ G     # 4 1 6 +  @  8  8  A  ;  6  "  "  / / G             , Primary Key " #' *+ 7 , -2 56     *  % () (  # &'  '    !  $&  # Biz fields # #  #  $  $  $   $  %)  %  %#  %&(  &/  &  &)  &,.  (+  (  (%  ((*  )  )  )   ) " ,Cash Security fields , ,  , ; 1<Bond Security fields 2Equity Security fields 1* 1+6 19; 2# 2 2 2 " 3- 3 3' 3*, 48 4' 4(2 457 5; 5* 5+5 58: 68 6' 6(2 657 7; 7' 7(5 78: k 8L"^Issuance can be repeated as there may be re-openings of bond auctions (e.g. in US treasuries) 8 8 8 89F 8IKbproto3 #fintekkers/models/price/price.protofintekkers.models.price*fintekkers/models/util/decimal_value.proto,fintekkers/models/util/local_timestamp.proto!fintekkers/models/util/uuid.proto)fintekkers/models/security/security.proto" PriceProto! object_class ( R objectClass version ( Rversion5 uuid ( 2!.fintekkers.models.util.UUIDProtoRuuid@ as_of ( 2+.fintekkers.models.util.LocalTimestampProtoRasOf is_link (RisLinkJ valid_from ( 2+.fintekkers.models.util.LocalTimestampProtoR validFromF valid_to ( 2+.fintekkers.models.util.LocalTimestampProtoRvalidTo? price ( 2).fintekkers.models.util.DecimalValueProtoRpriceE security ( 2).fintekkers.models.security.SecurityProtoRsecurityBB PriceProtosPJ       4 6 + 3   "   "   ,  ,              , Primary Key " #' *+ 7 , -2 56     *  % () (  # &' 6 * +0 35 9 * +3 68bproto3  0fintekkers/models/position/position_status.protofintekkers.models.position*P PositionStatusProto UNKNOWN HYPOTHETICAL INTENDED EXECUTEDBBPositionStatusProtosPJ       #  "  "  5 5           "Hypothetical status means a transaction, tax lot or position that may never occur. This can be used to understand how potential actions could impact a portfolio        "Intended status means a transaction, tax lot or position that is expected to occur if nothing changes. For example a fixed income bond that is expected to pay a coupon, or a security that is expected to mature in a specific point in the future    z   "mExecuted status means a transaction, tax lot or position that is the result of a legally binding transaction    bproto3  4fintekkers/models/transaction/transaction_type.protofintekkers.models.transaction*z TransactionTypeProto UNKNOWN BUY SELL DEPOSIT WITHDRAWAL MATURATION MATURATION_OFFSETBBTransactionTypeProtosPJ      &  "  "  6 6                                     bproto3  /fintekkers/models/transaction/transaction.protofintekkers.models.transaction*fintekkers/models/util/decimal_value.proto'fintekkers/models/util/local_date.proto,fintekkers/models/util/local_timestamp.proto!fintekkers/models/util/uuid.proto+fintekkers/models/portfolio/portfolio.proto4fintekkers/models/strategy/strategy_allocation.proto)fintekkers/models/security/security.proto#fintekkers/models/price/price.proto0fintekkers/models/position/position_status.proto4fintekkers/models/transaction/transaction_type.proto" TransactionProto! object_class ( R objectClass version ( Rversion5 uuid ( 2!.fintekkers.models.util.UUIDProtoRuuid@ as_of ( 2+.fintekkers.models.util.LocalTimestampProtoRasOf is_link (RisLinkJ valid_from ( 2+.fintekkers.models.util.LocalTimestampProtoR validFromF valid_to ( 2+.fintekkers.models.util.LocalTimestampProtoRvalidToI portfolio ( 2+.fintekkers.models.portfolio.PortfolioProtoR portfolioE security ( 2).fintekkers.models.security.SecurityProtoRsecurity^ transaction_type (23.fintekkers.models.transaction.TransactionTypeProtoRtransactionTypeE quantity ( 2).fintekkers.models.util.DecimalValueProtoRquantity9 price ( 2#.fintekkers.models.price.PriceProtoRpriceE trade_date ( 2&.fintekkers.models.util.LocalDateProtoR tradeDateO settlement_date ( 2&.fintekkers.models.util.LocalDateProtoRsettlementDate] childTransactions ( 2/.fintekkers.models.transaction.TransactionProtoRchildTransactionsX position_status (2/.fintekkers.models.position.PositionStatusProtoRpositionStatus trade_name ( R tradeNamed strategy_allocation ( 23.fintekkers.models.strategy.StrategyAllocationProtoRstrategyAllocation! is_cancelled (R isCancelledBBTransactionProtosPJ 7     & 4 1 6 +  5  >  3  -  :  >  "  "  2 2 7              Primary Key    %   #$     *  % () (  # &' ! !<Transaction details !, !-6 !9; "9 "* "+3 "68  #+  #  #'  #(*  $9  $*  $+3  $68  %0  %$  %%*  %-/ c  (8VNOTE: We're using timestamps for dates. The time portion will be ignored when parsing  ('  ((2  (57  )=  )'  )(7  ):< i .3\Lineage TransactionProto cashTransaction = 20; TransactionProto parentTransaction = 21; . .  .- .02  1DBusiness metadata 10 11@ 1AC 2 2 2  2 3L 34 35H 3IK ! 6System-based fields 6 6 6bproto3 0fintekkers/models/util/lock/node_partition.protofintekkers.models.util.lock" NodePartition! object_class ( R objectClass version ( Rversion partition (R partition namespace ( R namespaceJ      $ * The definition of a partition             The unique id that identifies a partition. For example a namespace with two partitions may have one partition with value 0, and another with value 1 Values may not persist over time. If a namespace moves from having two partitions to having four may go from {0,1} to {0,1,2,3} depending on the implementation. Partitions are an internal Fintekkers concept and should not be exposed to clients     A generic concept to allow partitions of different data types. For example, 'Portfolio' may have a different partition space versus 'Security'. The natural values to use for this would be the object types provided by different services.    bproto3  %fintekkers/models/util/endpoint.protofintekkers.models.util"^ Endpoint ip ( Rip port ( Rport. fully_qualified_url ( RfullyQualifiedUrlJ          The IP address that an endpoint is exposed through. The assumption is the IP is exposed to internal clients through VPC/Security rules, or to the public internet if public-facing    T  GThe port that the service is listening to on the specified IP address.       !sPlaceholder for the future. For public-facing traffic a URL will be used, and the resolution to IP occurs via DNS.     bproto3 ,fintekkers/models/util/lock/node_state.protofintekkers.models.util.lock,fintekkers/models/util/local_timestamp.proto%fintekkers/models/util/endpoint.proto0fintekkers/models/util/lock/node_partition.proto" NodeState! object_class ( R objectClass version ( RversionH partition ( 2*.fintekkers.models.util.lock.NodePartitionR partition= end_point ( 2 .fintekkers.models.util.EndpointRendPointH last_seen ( 2+.fintekkers.models.util.LocalTimestampProtoRlastSeen is_expired (R isExpiredJ      $ 6 / :                   &  :Placeholder, will change  +  ,5  89 D 07The end point that serves responses for this partition ! "+ ./ _ ;RThe last time the node for this partition was seen, meaning the latest heartbeat , -6 9: L ?Whether the lock is expired or not (owned by the lock-service)   bproto3  (fintekkers/models/util/api/api_key.protofintekkers.models.util.api"t API_Key! object_class ( R objectClass version ( Rversion identity ( Ridentity key ( RkeyJ .     #   . TODO: Need to decide how to add API key to requests: Option 1: We create a request object: Request { ApiKey: xxx, Request: yyy, RequestObjectClass: zzz }, where yyy could be a oneof(each request type), or simply a bytes version of the underlying request; and zzz would be explicit on the request object Option 2: Each service request requires an API key explicitly: QueryPositionRequest { ApiKey: xxx, } CreateTransactionRequest { ApiKey: xxx, } Option 3: ? Pros/Cons Option 1: PRO: Each indvidual request object doesn't require any change PRO: Each underlying service could be sent the request and not even be aware of the security layer CON: ? Adds a layer of indirection? Option 2: PRO: Very explicit approach CON: Any changes in ApiKey model would need to be propagated to all the new objects CON: Requires developers to understand they need to add this to new requests they define I'm favoring option 1, but will think on it.    "Will be "API_Key" " "  "  %In format 1.0.0 % %  %  )Identify is a unique identifier for the user. Initially this can be email. Over time this can evolve to be a uuid which would represent an organization, organizational unit, or user ) )  )  -The key. This could be a string representation of a certificate, token or credential provided by, say Google's authentication framework. - - -bproto3  +fintekkers/models/security/tenor_type.protofintekkers.models.security*A TenorTypeProto UNKNOWN_TENOR_TYPE PERPETUAL TERMBBTenorTypeProtosPJ       #  "  "  0 0                     bproto3  &fintekkers/models/security/tenor.protofintekkers.models.security+fintekkers/models/security/tenor_type.proto" TenorProto! object_class ( R objectClass version ( Rversion term_value ( R termValueI tenor_type (2*.fintekkers.models.security.TenorTypeProtoR tenorTypeBB TenorProtosPJ      # 5  "  "  , ,                          ; + ,6 9:bproto3 (fintekkers/models/position/measure.protofintekkers.models.position* MeasureProto UNKNOWN_MEASURE DIRECTED_QUANTITY MARKET_VALUE UNADJUSTED_COST_BASIS ADJUSTED_COST_BASIS CURRENT_YIELD YIELD_TO_MATURITYBB MeasureProtosPJ      #  "  "  . .                                   The current yield of the security, essentially coupon / current price. The price can be unadjusted cost basis, adjusted cost basis, market value, and so on. This is a bond-centric calculation. For equity securities, the TTM dividends will be used as a coupon equivalent (not currently supported).     The yield if the security is held to maturity. For equities, this will be blank. For bonds this will be calculated as: https://www.wallstreetprep.com/knowledge/yield-to-maturity-ytm/ For TIPS, no future inflation adjustments to principal will be included. For FRNs, the assumption is the floating rate doesn't change between now and maturity. In the future, context-overrides will allow customization of these assumptions  bproto3 , google/protobuf/any.protogoogle.protobuf"6 Any type_url ( RtypeUrl value ( RvalueBv com.google.protobufBAnyProtoPZ,google.golang.org/protobuf/types/known/anypbGPBGoogle.Protobuf.WellKnownTypesJ*   2 Protocol Buffers - Google's data interchange format Copyright 2008 Google Inc. All rights reserved. https://developers.google.com/protocol-buffers/ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     "; %";  #C  #C  $, $,  %) %)  &"  &"  '! $'!  | `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example "foo.bar.com/x/y.z" will yield type name "y.z". JSON The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { "@type": "type.googleapis.com/google.profile.Person", "firstName": , "lastName": } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" } |  A URL/resource name that uniquely identifies the type of the serialized protocol buffer message. This string must contain at least one "/" character. The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading "." is not accepted). In practice, teams usually precompile into the binary all types that they expect it to use in the context of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, one can optionally set up a type server that maps type URLs to message definitions as follows: * If no scheme is provided, `https` is assumed. * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.) Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com. Schemes other than `http`, `https` (or the empty scheme) might be used with implementation specific semantics.     W I Must be a valid serialized protocol buffer of the above specified type.   bproto3  &fintekkers/models/position/field.protofintekkers.models.position* FieldProto UNKNOWN_FIELD ID AS_OF EFFECTIVE_DATE  STRATEGY  SECURITY  SECURITY_DESCRIPTION= SECURITY_ISSUER_NAME> CASH_IMPACT_SECURITY  ASSET_CLASS2 PRODUCT_CLASS3 PRODUCT_TYPE4 SECURITY_ID5 IDENTIFIER6 TENOR7 ISSUE_DATE: MATURITY_DATE8 ADJUSTED_TENOR9 PORTFOLIO PORTFOLIO_ID PORTFOLIO_NAME< PRICE PRICE_ID IS_CANCELLED POSITION_STATUS TRADE_DATE SETTLEMENT_DATE TRANSACTION_TYPE  TAX_LOT_OPEN_DATE( TAX_LOT_CLOSE_DATE)BB FieldProtosPJ 9     #  "  "  , x ,"m FieldProto. You can look at the Java implementation of Field.java to understand the meaning of each field.  9          " (UUID.class)     "ZonedDateTime   _ @ Attribute fields. Likely to be fields that one would pivot on. "LocalDate.class   2 "%common.model.strategy.Strategy.class    2 "%common.model.security.Security.class          2 "%common.model.security.Security.class   V  Security Fields "7 AssetClass(String.class), //FixedIncome, Equity, etc     B  "5 ProductClass(String.class), //Bond, CashEquity, etc     =  "0 ProductType (String.class), //TBILL, BOND, etc                   " 1M   ! ! !  " " " # # # G &Portfolio fields "'common.model.portfolio.Portfolio.class & &  '"UUID ' ' ( ( ( < + Miscellaneous "common.model.price.Price.class + +  ,"UUID , ,   -"Boolean.class - - " ."PositionStatus.class . . = 1Transaction only " TradeDate(LocalDate.class), 1 1 0 2"# SettlementDate(LocalDate.class), 2 2 A 3"4 BUY, SELL, MATURATION, etc (TransactionType.class) 3 3 ? 6 Tax Lot only "# TaxLotOpenDate(LocalDate.class), 6 6 1 7"$ TaxLotCloseDate(LocalDate.class), 7 7bproto3  .fintekkers/models/position/position_util.protofintekkers.models.positiongoogle/protobuf/any.proto&fintekkers/models/position/field.proto(fintekkers/models/position/measure.proto*fintekkers/models/util/decimal_value.proto" MeasureMapEntryB measure (2(.fintekkers.models.position.MeasureProtoRmeasure] measure_decimal_value ( 2).fintekkers.models.util.DecimalValueProtoRmeasureDecimalValue" FieldMapEntry< field (2&.fintekkers.models.position.FieldProtoRfieldD field_value_packed ( 2.google.protobuf.AnyHRfieldValuePacked enum_value (HR enumValue# string_value ( HR stringValueN operator (22.fintekkers.models.position.PositionFilterOperatorRoperatorB FieldMapValueOneOf* PositionFilterOperator UNKNOWN_OPERATOR EQUALS NOT_EQUALS LESS_THAN LESS_THAN_OR_EQUALS MORE_THAN MORE_THAN_OR_EQUALSBBPositionUtilProtosPJ !     # # 0 2 4   "   "   3  3       E * +@ CD           /"If the field is a 'complex' proto type (e.g. a full enum) we serialize the enum and wrap it in an Any. You can think of the Any as a string describing the type, and a binary of the proto itself  * -. ^ "QIf the field is an enum type, then we use the number to denote which value it is     c "VIf the field is a string type, we just serialize the string (packing has an overhead)     > '"1Used for position filters, but not for responses  ! $& !               !.  !+  ,-  /;  /8  9:   >    $              ) 7The list of UUIds to return   + ,1 46 P OCA list of position filters that will filter securities that match. 0 1I LN 2 8%The as of date to query the data set , -2 57 -  Max number of records to return   bproto3  -fintekkers/requests/util/errors/message.protofintekkers.requests.util.errors"g Message( message_for_user ( RmessageForUser2 message_for_developer ( RmessageForDeveloperJ      (    This message should not have any technical knowledge requirements to be understood and provide a suggested action for how to avoid. Examples: A server throws an exception -> "Please retry your operation, and if it fails again, contact customer support". A bond security is set as having a fixed coupon, but a reference index and spread is provided -> "A fixed income bond needs a static coupon, and shouldn't have an index or spread provided."      #This message can be used to instruct a developer operating on APIs how best to approach resolving this issue. A server throws an exception -> "The service timed out or rejected this message. Please consider whether you are spamming the backend server and reach out to developer support to see how to optimize your usage".    !"bproto3 +fintekkers/requests/util/errors/error.protofintekkers.requests.util.errors-fintekkers/requests/util/errors/message.proto" ErrorProto> code (2*.fintekkers.requests.util.errors.ErrorCodeRcode@ detail ( 2(.fintekkers.requests.util.errors.MessageRdetail" WarningProto> code (2*.fintekkers.requests.util.errors.ErrorCodeRcode@ detail ( 2(.fintekkers.requests.util.errors.MessageRdetail*+ ErrorCode UNKNOWN_ERROR WARNINGJ      ( 7   Error codes are defined to allow clients to programmatically respond to issues. The bar for creating a new error code should be that the           "TO THINK ABOUT     An error is used for situations where a request cannot be processed successfully, either from a technical perspective or a business perspective.             Warnings can have error codes, if it is useful in categorizing the severity of the warning. For example a warning may be thrown if 2 securities are created with the same identifier. Another example may be usage of a deprecated API.           bproto3  -fintekkers/requests/util/errors/summary.protofintekkers.requests.util.errors+fintekkers/requests/util/errors/error.proto" SummaryProtoC errors ( 2+.fintekkers.requests.util.errors.ErrorProtoRerrorsI warnings ( 2-.fintekkers.requests.util.errors.WarningProtoRwarningsJ      ( 5   GRPC error codes are used to indicate if there was any substantial issue. They cover situations like OK, Cancelled, AlreadyExists, InvalidArgument, ResourceExhausted, Unauthenticated, etc. Ideally Fintekkers will not introduce another concept on top of that to avoid complicating the solution. If there are any errors, the GRPC response should not return OK (code=0). Warnings may be returned at any time, and may be done even with successful responses.   !      %     #$bproto3 @fintekkers/requests/transaction/query_transaction_response.protofintekkers.requests.transaction/fintekkers/models/transaction/transaction.proto?fintekkers/requests/transaction/query_transaction_request.proto-fintekkers/requests/util/errors/summary.proto" QueryTransactionResponseProto! object_class ( R objectClass version ( Rversion{ create_transaction_request ( 2=.fintekkers.requests.transaction.QueryTransactionRequestProtoRcreateTransactionRequestb transaction_response ( 2/.fintekkers.models.transaction.TransactionProtoRtransactionResponse[ errors_or_warnings( ( 2-.fintekkers.requests.util.errors.SummaryProtoRerrorsOrWarningsB"BQueryTransactionResponseProtosPJ      ( 9 I 7   "   "   ?  ?    %           K * +E HJ T   9 :N QS } 3pIf no errors or warnings in the response then the request was processed successfully without any contingencies.  - 02bproto3  @fintekkers/requests/transaction/create_transaction_request.protofintekkers.requests.transaction/fintekkers/models/transaction/transaction.proto" CreateTransactionRequestProto! object_class ( R objectClass version ( Rversioni create_transaction_input ( 2/.fintekkers.models.transaction.TransactionProtoRcreateTransactionInputB"BCreateTransactionRequestProtosPJ      ( 9  "  "  ? ?    %                 O 0 1I LNbproto3  Afintekkers/requests/transaction/create_transaction_response.protofintekkers.requests.transaction/fintekkers/models/transaction/transaction.proto@fintekkers/requests/transaction/create_transaction_request.proto" CreateTransactionResponseProto! object_class ( R objectClass version ( Rversion| create_transaction_request ( 2>.fintekkers.requests.transaction.CreateTransactionRequestProtoRcreateTransactionRequestb transaction_response ( 2/.fintekkers.models.transaction.TransactionProtoRtransactionResponseB#BCreateTransactionResponseProtosPJ      ( 9 J  "  "   @  @    &                 L + ,F IK K 0 1E HJbproto3 0fintekkers/requests/util/lock/lock_request.protofintekkers.requests.util.lock0fintekkers/models/util/lock/node_partition.proto%fintekkers/models/util/endpoint.proto" LockRequestProto! object_class ( R objectClass version ( RversionQ node_partition ( 2*.fintekkers.models.util.lock.NodePartitionR nodePartition< endpoint ( 2 .fintekkers.models.util.EndpointRendpointBBLockRequestProtosPJ      & < :1 import "fintekkers/models/util/endpoint.proto"; /  "  "   2  2                   @The namespace/partition to get the lock for. Generally, when requesting a lock the caller should only specify the namespace, meaning that its up to the lock service to pick a partition for you. If the partition number is also specified the lock service will ONLY try to get the lock on that parition and fail if it the lock is already taken + ,: =? 0 ! "* -/bproto3 1fintekkers/requests/util/lock/lock_response.protofintekkers.requests.util.lock,fintekkers/models/util/lock/node_state.proto0fintekkers/requests/util/lock/lock_request.proto-fintekkers/requests/util/errors/summary.proto" LockResponseProto! object_class ( R objectClass version ( RversionY get_lock_request ( 2/.fintekkers.requests.util.lock.LockRequestProtoRgetLockRequestK lock_response ( 2&.fintekkers.models.util.lock.NodeStateR lockResponse[ errors_or_warnings( ( 2-.fintekkers.requests.util.errors.SummaryProtoRerrorsOrWarningsBBLockResponseProtosPJ      & 6 : 7  "  "   3  3                  3 (&The request that this response is for  # &'  :Returns the node, and its state that was granted to the caller. If this is empty then there will be details in the {errors_or_warning} variable ' (5 89 } 3pIf no errors or warnings in the response then the request was processed successfully without any contingencies.  - 02bproto3  (fintekkers/requests/util/operation.protofintekkers.requests.util*a RequestOperationTypeProto UNKNOWN_OPERATION VALIDATE CREATE GET SEARCHB B OperationPJ      !  "  "  * *         Validate whether an object is well-formed. The proto schema provides the syntax, but validation ensures semantic meaning is correct.    .  !Create an object in the back-end   Retrieve an object   "  Search for an object   bproto3  9fintekkers/requests/security/query_security_request.protofintekkers.requests.security!fintekkers/models/util/uuid.proto,fintekkers/models/util/local_timestamp.proto0fintekkers/models/position/position_filter.proto" QuerySecurityRequestProto! object_class ( R objectClass version ( Rversion7 uuIds ( 2!.fintekkers.models.util.UUIDProtoRuuIdsc search_security_input ( 2/.fintekkers.models.position.PositionFilterProtoRsearchSecurityInput@ as_of ( 2+.fintekkers.models.util.LocalTimestampProtoRasOfBBQuerySecurityRequestProtosPJ      % + 6 :  "  "   ;  ; D  8A request to allow clients to find existing securities.  !           ) 7The list of UUIds to return   + ,1 46 P LCA list of position filters that will filter securities that match. 0 1F IK 8 , -2 57bproto3 :fintekkers/requests/security/query_security_response.protofintekkers.requests.security)fintekkers/models/security/security.proto9fintekkers/requests/security/query_security_request.proto-fintekkers/requests/util/errors/summary.proto" QuerySecurityResponseProto! object_class ( R objectClass version ( Rversioni query_security_input ( 27.fintekkers.requests.security.QuerySecurityRequestProtoRquerySecurityInputV security_response ( 2).fintekkers.models.security.SecurityProtoRsecurityResponse[ errors_or_warnings( ( 2-.fintekkers.requests.util.errors.SummaryProtoRerrorsOrWarningsBBQuerySecurityResponseProtosPJ      % 3 C 7  "  "   <  <    "              ; 6.The input that was provided for this request.  0 35 L K?The security (or securities) that was matched by this request.   3 4E HJ < P/Any errors or warnings related to this request   7 8J MObproto3 :fintekkers/requests/security/create_security_request.protofintekkers.requests.security)fintekkers/models/security/security.proto" CreateSecurityRequestProto! object_class ( R objectClass version ( RversionP security_input ( 2).fintekkers.models.security.SecurityProtoR securityInputBBCreateSecurityRequestProtosPJ      % 3  "  "  < <  Use this request to create or update securities. Uniqueness is guaranteed via the UUID. Security identifiers do not guarantee uniqueness. As an example a bond ISIN or stock ticker may be re-used over time. Therefore if you send 2 requests with the same security identifier you will create two securities. In order to avoid duplication you should either re-use the UUID when calling the API, in which case an update will be applied. If you do not know the UUID, you should first do a search operation. It is preferred that the client generates the UUID. This will avoid issues in the network leading to duplicate securities. "            AA fully formed security object to be created or updated. Validations may be applied before creating. For example creating an equity security with bond fields may be invalid and therefore rejected. , -; >@bproto3 ;fintekkers/requests/security/create_security_response.protofintekkers.requests.security)fintekkers/models/security/security.proto:fintekkers/requests/security/create_security_request.proto-fintekkers/requests/util/errors/summary.proto" CreateSecurityResponseProto! object_class ( R objectClass version ( Rversionc security_request ( 28.fintekkers.requests.security.CreateSecurityRequestProtoRsecurityRequestV security_response ( 2).fintekkers.models.security.SecurityProtoRsecurityResponse[ errors_or_warnings( ( 2-.fintekkers.requests.util.errors.SummaryProtoRerrorsOrWarningsB BCreateSecurityResponseProtosPJ      % 3 D 7  "  "   =  =    #              ; 3.The input that was provided for this request.  - 02 X BKThe security (or securities) that were created in response to this request * +< ?A } 3pIf no errors or warnings in the response then the request was processed successfully without any contingencies.  - 02bproto3 9fintekkers/requests/position/query_position_request.protofintekkers.requests.position&fintekkers/models/position/field.proto(fintekkers/models/position/measure.proto)fintekkers/models/position/position.proto0fintekkers/models/position/position_filter.proto,fintekkers/models/util/local_timestamp.proto(fintekkers/requests/util/operation.proto" QueryPositionRequestProto! object_class ( R objectClass version ( RversionZ operation_type (23.fintekkers.requests.util.RequestOperationTypeProtoR operationTypeR position_type (2-.fintekkers.models.position.PositionTypeProtoR positionTypeR position_view (2-.fintekkers.models.position.PositionViewProtoR positionView> fields (2&.fintekkers.models.position.FieldProtoRfieldsD measures (2(.fintekkers.models.position.MeasureProtoRmeasuresT filter_fields ( 2/.fintekkers.models.position.PositionFilterProtoR filterFields@ as_of! ( 2+.fintekkers.models.util.LocalTimestampProtoRasOfBBQueryPositionRequestProtosPJ      % 0 2 3 :  6  2   "   "  ; ;  !           5  !/ 24 B . /< ?A B . /< ?A =   0 17 :< A   2 3; >@ D 0 1> AC 8 , -2 57bproto3  :fintekkers/requests/position/query_position_response.protofintekkers.requests.position)fintekkers/models/position/position.proto9fintekkers/requests/position/query_position_request.proto" QueryPositionResponseProto! object_class ( R objectClass version ( Rversionb position_request ( 27.fintekkers.requests.position.QueryPositionRequestProtoRpositionRequest- reporting_currency ( RreportingCurrencyG positions ( 2).fintekkers.models.position.PositionProtoR positionsBBQueryPositionResponseProtosPJ      % 3 C  "  "   <  <    "                 ; $ %5 8: h !"[TODO - Think about how to model this long term; ISO code vs. UUID vs. full security object     C   3 4= @Bbproto3  4fintekkers/requests/price/create_price_request.protofintekkers.requests.price#fintekkers/models/price/price.proto" CreatePriceRequestProto! object_class ( R objectClass version ( RversionQ create_price_input ( 2#.fintekkers.models.price.PriceProtoRcreatePriceInputBBCreatePriceRequestProtosPJ      " -  "  "  9 9                      =  $  %7  :  "  "   :  :                     4  . 13 B   - .< ?Abproto3  ;fintekkers/requests/portfolio/query_portfolio_request.protofintekkers.requests.portfolio!fintekkers/models/util/uuid.proto,fintekkers/models/util/local_timestamp.proto0fintekkers/models/position/position_filter.proto" QueryPortfolioRequestProto! object_class ( R objectClass version ( Rversion7 uuIds ( 2!.fintekkers.models.util.UUIDProtoRuuIdse search_portfolio_input ( 2/.fintekkers.models.position.PositionFilterProtoRsearchPortfolioInput@ as_of ( 2+.fintekkers.models.util.LocalTimestampProtoRasOfBBQueryPortfolioRequestProtosPJ      & + 6 :  "  "   <  <    "              7   + ,1 46 M 0 1G JL 8 , -2 57bproto3   >    $                 <  6 9; N   5 6H KMbproto3  AC N   5 6H KMbproto3  5fintekkers/requests/valuation/valuation_request.protofintekkers.requests.valuation)fintekkers/models/security/security.proto)fintekkers/models/position/position.proto#fintekkers/models/price/price.proto(fintekkers/requests/util/operation.proto(fintekkers/models/position/measure.proto" ValuationRequestProto! object_class ( R objectClass version ( RversionZ operation_type (23.fintekkers.requests.util.RequestOperationTypeProtoR operationTypeD measures (2(.fintekkers.models.position.MeasureProtoRmeasuresP security_input ( 2).fintekkers.models.security.SecurityProtoR securityInputP position_input ( 2).fintekkers.models.position.PositionProtoR positionInputD price_input ( 2#.fintekkers.models.price.PriceProtoR priceInputBBValuationRequestProtosPJ #     & 3 3 - 2  2   "   "   7  7  # Developer notes. This will need some re-organization once we start thinking through varied valuations (e.g. value over a time range, value multiple securities in the same request/etc. For now, the caller will need to make individual requests.             IOnly supports GET, since there is no backing store, so CREATE isn't relevant. SEARCH isn't relevant either. VALIDATE could be implemented later, e.g. if the caller wants to check their inputs are correct. 4 5C FH j A]The list of measures to be generated by this request, e.g. MARKET_VALUE, CURRENT_YIELD, etc.   2 3; >@ R ?EThe full security object for which we are going to run the valuation * +9 <> 2 !>%The positions we are going to value. !* !+9 !;= "6 "$ "%0 "35bproto3  6fintekkers/requests/valuation/valuation_response.protofintekkers.requests.valuation.fintekkers/models/position/position_util.proto5fintekkers/requests/valuation/valuation_request.proto" ValuationResponseProto! object_class ( R objectClass version ( Rversiona valuation_request ( 24.fintekkers.requests.valuation.ValuationRequestProtoRvaluationRequestT measure_results ( 2+.fintekkers.models.position.MeasureMapEntryRmeasureResultsBBValuationResponseProtosPJ      & 8 ?  "  "   8  8                     /  ) ,. K   5 6E HJbproto3 =fintekkers/services/portfolio-service/portfolio_service.proto%fintekkers.services.portfolio_service \ ;NOReturns the current status of all nodes, across all namespaces and partitions. ; ;4 ;?L \ >SOReturns the current status of all nodes, across all namespaces and partitions. >* >,9 >DQ % AwIn namespace / parition A AE APubproto3 5fintekkers/services/price-service/price_service.proto!fintekkers.services.price_service3fintekkers/requests/price/query_price_request.proto4fintekkers/requests/price/query_price_response.proto4fintekkers/requests/price/create_price_request.proto5fintekkers/requests/price/create_price_response.proto-fintekkers/requests/util/errors/summary.proto2 Pricey CreateOrUpdate2.fintekkers.requests.price.CreatePriceRequestProto3.fintekkers.requests.price.CreatePriceResponseProtoq GetByIds1.fintekkers.requests.price.QueryPriceRequestProto2.fintekkers.requests.price.QueryPriceResponseProtoq Search1.fintekkers.requests.price.QueryPriceRequestProto2.fintekkers.requests.price.QueryPriceResponseProto0p ListIds1.fintekkers.requests.price.QueryPriceRequestProto2.fintekkers.requests.price.QueryPriceResponseProto{ ValidateCreateOrUpdate2.fintekkers.requests.price.CreatePriceRequestProto-.fintekkers.requests.util.errors.SummaryProtox ValidateQueryRequest1.fintekkers.requests.price.QueryPriceRequestProto-.fintekkers.requests.util.errors.SummaryProtoBJ      * = > > ? 7   $  $   "  "          K  X   D Q   B OU V   C P   "S ^    P [bproto3  =fintekkers/services/valuation-service/valuation_service.proto%fintekkers.services.valuation_service5fintekkers/requests/valuation/valuation_request.proto6fintekkers/requests/valuation/valuation_response.proto2 Valuation{ RunValuation4.fintekkers.requests.valuation.ValuationRequestProto5.fintekkers.requests.valuation.ValuationResponseProtoBJ       . ? @  $ $  " "       G    I  Ebproto3  Afintekkers/services/transaction-service/transaction_service.proto'fintekkers.services.transaction_service@fintekkers/requests/transaction/create_transaction_request.protoAfintekkers/requests/transaction/create_transaction_response.proto?fintekkers/requests/transaction/query_transaction_request.proto@fintekkers/requests/transaction/query_transaction_response.proto-fintekkers/requests/util/errors/summary.proto2 Transaction CreateOrUpdate>.fintekkers.requests.transaction.CreateTransactionRequestProto?.fintekkers.requests.transaction.CreateTransactionResponseProto GetByIds=.fintekkers.requests.transaction.QueryTransactionRequestProto>.fintekkers.requests.transaction.QueryTransactionResponseProto Search=.fintekkers.requests.transaction.QueryTransactionRequestProto>.fintekkers.requests.transaction.QueryTransactionResponseProto0 ListIds=.fintekkers.requests.transaction.QueryTransactionRequestProto>.fintekkers.requests.transaction.QueryTransactionResponseProto ValidateCreateOrUpdate>.fintekkers.requests.transaction.CreateTransactionRequestProto-.fintekkers.requests.util.errors.SummaryProto ValidateQueryRequest=.fintekkers.requests.transaction.QueryTransactionRequestProto-.fintekkers.requests.util.errors.SummaryProtoBJ      0 J K I J 7   $  $   "  "       V b   O [   M Y_ `   N Z   !^ i   [ fbproto3 ;fintekkers/services/security-service/security_service.proto$fintekkers.services.security_service9fintekkers/requests/security/query_security_request.proto:fintekkers/requests/security/query_security_response.proto:fintekkers/requests/security/create_security_request.proto;fintekkers/requests/security/create_security_response.proto-fintekkers/requests/util/errors/summary.proto2 Security CreateOrUpdate8.fintekkers.requests.security.CreateSecurityRequestProto9.fintekkers.requests.security.CreateSecurityResponseProto} GetByIds7.fintekkers.requests.security.QuerySecurityRequestProto8.fintekkers.requests.security.QuerySecurityResponseProto} Search7.fintekkers.requests.security.QuerySecurityRequestProto8.fintekkers.requests.security.QuerySecurityResponseProto0| ListIds7.fintekkers.requests.security.QuerySecurityRequestProto8.fintekkers.requests.security.QuerySecurityResponseProto ValidateCreateOrUpdate8.fintekkers.requests.security.CreateSecurityRequestProto-.fintekkers.requests.util.errors.SummaryProto~ ValidateQueryRequest7.fintekkers.requests.security.QuerySecurityRequestProto-.fintekkers.requests.util.errors.SummaryProtoBJ      - C D D E 7   $  $   "  "          Q  ^   J W   H U[ \   I V   "Y d    V abproto3