diff --git a/api/api.gen.go b/api/api.gen.go index 2f689fdc33..9fdd30e506 100644 --- a/api/api.gen.go +++ b/api/api.gen.go @@ -396,9 +396,9 @@ const ( // Defines values for InvoiceLineStatus. const ( - InvoiceLineStatusDetail InvoiceLineStatus = "detail" - InvoiceLineStatusSplit InvoiceLineStatus = "split" - InvoiceLineStatusValid InvoiceLineStatus = "valid" + InvoiceLineStatusDetailed InvoiceLineStatus = "detailed" + InvoiceLineStatusSplit InvoiceLineStatus = "split" + InvoiceLineStatusValid InvoiceLineStatus = "valid" ) // Defines values for InvoiceLineTaxBehavior. @@ -3523,7 +3523,7 @@ type InvoiceDetailedLine struct { // // New discounts can be added via the invoice's discounts API, to facilitate // discounts that are affecting multiple lines. - Discounts *InvoiceLineDiscounts `json:"discounts,omitempty"` + Discounts *InvoiceDetailedLineDiscounts `json:"discounts,omitempty"` // ExternalIds External IDs of the invoice in other apps such as Stripe. ExternalIds *InvoiceLineAppExternalIds `json:"externalIds,omitempty"` @@ -3600,6 +3600,14 @@ type InvoiceDetailedLineType string // commitment. type InvoiceDetailedLineCostCategory string +// InvoiceDetailedLineDiscounts InvoiceLineDiscounts represents the discounts applied to the invoice line by type. +type InvoiceDetailedLineDiscounts struct { + // Amount Amount based discounts applied to the line. + // + // Amount based discounts are deduced from the total price of the line. + Amount *[]InvoiceLineAmountDiscount `json:"amount,omitempty"` +} + // InvoiceDetailedLineRateCard InvoiceDetailedLineRateCard represents the rate card (intent) for a flat fee line. type InvoiceDetailedLineRateCard struct { // Discounts The discounts that are applied to the line. @@ -19129,776 +19137,776 @@ var swaggerSpec = []string{ "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", - "i2pPIIt+/vb/AgAA//9v3BLBe3wLAA==", + "W9BhDOKx1ObYD9TM4XQKfSeB07/eSNx0EHZ2dx+7kmzcnznscQ1ksQ/yuPsgD67Bw6M/6richFESl59/", + "5s2+GiMBfcMlv9dWiH3JrkmAyN+EeNavOI0v0G909OLR69Mx9HmlGS+4FTWnon4KbAX8f2jfEvPaSw5+", + "hOQJ/ZhoCYuSzx8xUatreJY+eXbHbaWUs9AILs0rGpEPcHNcskJiw/JJNPEGq5gjPByhNq+4j3cdSo1d", + "ivMnq1tR04vwdRclYeTIw87rjbc3auve9GeJlpxI5Roog/kyNFdOUtnXE8FAU0V1fkpUYu/MSJ44Y/wD", + "sME//P6Hfk778PsfOi3fPNvluizoirhsjD5Lz11WlygVs7JQ7hHXTiHs1poId27J1BvBzdFHVdvYMD+U", + "/IiCb8glA1leFvlkpwmwrxvJr/WRx1sIG4RLRSAiu7KUkMk5tpAjpapKqRnGHToXnTf5GisnaRcMAH52", + "zLXGZYAbTEOZBmj7kbvf2Y37fRI7yO8GxX/1bvQ1WFbUsGOq8o+6/s/8IGl+becgGVV5s5MDHr1Y1Lul", + "89qC0OvAPm84r4OkEW7fjBZFMOOjYI3JKigbjN1FDGQDHj4QJSKWCXEyl442mJjbF+M29T0O4suGNLj9", + "eqMB1t2X8XuhlX4IsAotyB08pqztUNEFqaMWmWkfLr05Dk3bh63lInwyhJQv6I1v4o6X3CoYnvFn33qy", + "S1Tghk4IAuCdbkiibWf2bQL/LjBvZ4jrbtfOeXzQxsAaj/tGpEfe9CBCRnWD3s0Y2HQ3uhZ+c72o1nat", + "GKOfrRb4Ig9Zyn0WkptrsdXN/3aY0aVhrBhigIk/iOMgeNNy4ZOcMYDB/pBXYPmtdPgnnYpMLpfc+KgA", + "TyC1maR+3pO2tUad7FtN462OoT886DnewNUs616Va6u0tQRWrBaG1rveOcIN0/c6xD/lVRYnOmCNgTIW", + "ifyB25YB4bQeN9045IGGvLNILthIT/7l9kbUF/89Dk3h74cuFo7C/Cpbne+3N0o44WydIeKiQRq1VSCx", + "fxiXuZXu2lvxrieGNN7rgKfJVPxseaDVecaN5kF1ZJc9lTPFWCt53FPt6MHh4ailX4BmoBSjcU8uqPz2", + "oV+/wvqGCWr5WKF1GxEV8yBAwXlMHox2I2okAuu8cNG3IZWAxtI+vaj7RbRP6GsEmBMvlgUVXgSexK31", + "wpvdgjiwE+suA0fVT6heY4GPXmpa4K1+O2eurSGGg8eeyOiAOGu9byQtDFdrHJP7PsZfuNX5gt2YhsW5", + "ESxeUwP0xEYqmNx1ptmXZjvtHo7PkGXWRrBiVG+jOLZuxzP8POVhtQ9IJnP2G43wHNhUFiR4h+V1jDfK", + "hxjuDYOQ25fSsFeuOElt9+73wUdTxb0w8V3oFBqlTUlCBWE3XJs43tdKYTDW/XVRLdFEF8masun3CF6Q", + "KPj5WOswszf84NUeIM1jjSGKcH7ny7a88z6ENZrDU4h67IUTH7eyz0qqTDeTUvoIyqhMBpGVKauGaoMJ", + "h3HmTh3qOLFcZx20f2bCykItyml5A5fcQCI0dHR9PBW+cKMVElz2EReuW2cw6CirZ3iELyj49zGkOyRH", + "W6VHyyUKMIrN7ZkFAyWeMj2ZCjjD+jE5ZxRjpUKSNWgryFox50zTKGxpSVdQZNYV6baogyBjdmMek6mB", + "7H8dKuXVFTGB2URjXLIAbUIxWHebRQ6FkPx06Rtt9geur2WvCQdCnbPY8NUKd22CscwfRK7JgqFUaHHj", + "K5h72W9zTOZtciPaB3h9mkSgmOah7IZ/dOpBv43Sn/toO82qUrwJ+/zgIc3gfGKxvW8w2Nc3O+3jWmuD", + "T6BCnpV7bx9+ErKhIYQnIesueJEr1tN6A9PVkCp9xg7MGal1aJLfMh8vDr0ZYHLch53sw06+8rCTfbjJ", + "F6AyOWvHX3x/7A1+hMg+ElLgXX1PHTjrZFed2jthKPvYmH1szD42xgtMSwb16V4rQB4GR/x1hyZdqMuM", + "c9SJ/LF5F+RBbnntTKqI2L7xwRSQzGYFdypWXUdLlHwnpDj4lSnohZJRTN4tlZwrpiH0wnnlx/6StsLd", + "Ql5ryOhdVnXxF2RGYOZyAdH2055Acre4XeMsiStgl6GynkerJwWHLofIJrawsH6f0e7riJH6HUQAlXd5", + "DPuPX+/Z+6SnC9ykYuVe6LpUfdq5Zc7ebRoViOM6rDBd9GU7D573YtbaIrrAto5mg+UcoFyTirn65VNs", + "c8uJdodovnUIWY3oXQSQ+ToP9csZLa3M6Ss2magAH7pf7cGs0TGLugHF27cPTduHpu1D076e0DQ4v+/g", + "/O6j0z5PdFoiEGldJFfz1Vb5ateksX0r4b5jUThfoMQfGS/d2HN0lz0kn/GbKLbLQ2okALKKSx9ZpbNk", + "KoNOO7i4+5M1e+6Cxxo9erJVy27ztVt09zEW+xiLfYzFPsYCXARresv2U+3aS+V3UTHoi6raY9G+Ngax", + "6351fZdSztBOHeZQcRLi0q2AR7KCah16HtSaEMoFznAtpPFed5JzxTJTrH5b0Yp73+jeN7r3je5T8ffu", + "xr27cZ+Kv3czddxMe/P13ny9N19/MvP11kR3Yel/2H61Ld/g3fNOXAi8z6hwKg/2RckJnRmm6krDvwuz", + "wxAruKt5/DHG8A0Gi30q892lMvf2D38TlVncvLqet1OLQw96fME7VwOu19v7gdXTZvzNtosHqG6Vxt0U", + "UteR3YuEuHq9kO4O1knvWuN+HY+wmyieoYoW6zJfIFOclQXNGJ7jtbA13mwfCzzIZClzVqD1R5A3T143", + "TkVtLgKmuKTvmQZjmNfrjYSOUNfY/Bd4o5gTwa5duD7VIQ2hnnPLnJTPZkT46iN0LUhfitr8ZWmve81v", + "r/ltE2D4ZQbB/S6ixr5c7S0tLG8v354Hw0K7+6YIjcOaqbe6azaIxAswEED5QsxssyJGWXCzSbBIa+3r", + "BIzkF003Ya82X9ad3Nco8005wRkyXu+yE6E3jpQN/hMDOSGnLnq3A76l0m90ewyuSc5nsG4zFUHyjb/s", + "fNTtFuTQCJ9uBpJwo1kxa/exGEeRx9BX64gspTCLwgcQNwehIltIhQL+w8OH3+Mti991Fu5HyCkvVhgg", + "G9pnwG5ewzW+oFcsDrWXs3roh42JHoXWoHZ0rhsTYDvRjXicCh/JVMMfT/LoQdrjYCXw4Wz05Mxds302", + "fUw8GG6jgk6rOwQAxksS8w4NfpuA2DBvi3+2tCLEiNuZcevob+CoF/TmCVvQKy7VWv4VvRfy3RfyOvB/", + "T4cttRfc5mgXwFj/IEUsGXV8Dz7XrpUfC+UQmp8+ven9EF0biQkjRh+kF5CO/b83cHlvA0zZHI/dNWik", + "v7y7NyAFCAuMQrCK+pUvltHQHLu8O9qQ7W170YYmynvo1o6F/QBGGP6YpZDZ7Suwy9JY9IaUSl7xnKkm", + "Lvta7GZbtQN+jR/QOUtL1BAsGVcVKcMH0IoueNLwAGARQzTWTEWo4vWedQIx4fcQhUmOiOBFiM6EtqWu", + "IIUdhmsnTS0vpaXtP/yB3bBlaf7wB2cWojeT6eh+mjMpjGzbRazpuVxaiq6EURx6DgLzgQDZWocLM65f", + "8lbtPWrz9ABDQni5a8h0MoVz9ciZs7LElcZ8ZmB9HpMlR8ftEO91LKNpR1vHUBtvtoKQY+m+jvftMShi", + "79i8Ck29cllbCr0egWreXCpuFjGf3pdR24f47kN8P02I750mXzaz7ULqY4tphM66oOW6ICjLRCzgcM3x", + "ZNal5RhM0MsCOwU2QkxoNNi6JAN0fITsQSflVYLXNm+RM4VNpiH3+C6yFxFPPmli9/Du47g/aRx3II81", + "as5L7CbbdxnjY6TkSvBfKkZ4zoThM85UMLg5RjUmcyaYoiaKGWnEVIcrGYcSTGuSs5KJXBPLq0mBTXtn", + "NDPy/2fvXZjjtrF88a+C6v/eSrK31ZLsJJu4ampLluyJJrGtkeR4ZiOXDJHobqzYIEOAkjq5/u7/wjkA", + "CJJgN1sPv4KpezdyE28cHPzOwXmUmMCbFoXN20u+NkMokBdqFub9Yo2Tv9HVnC0j1E+YoCXPJfna/13a", + "8fpZJusMw5IugClM+c03jW0/fPnrVr31Wzu767XgPajoVZmycsXLoPneUtvl+lc9ZpNdGPahlpogmlcj", + "mp+12jaqRcwwBwRTP7H3UBRqQ04ULVfq/Y7ojAtd6ZjJIhchu3NXRJ8uLNOx4LcPs2FNiGw6YSlSmPhf", + "mzzoht6ui+DTNeg/4N1NpOymcfLrLeVCsRlyN132hP/R09LCPCxi+mYMqKanVECq+FnzSW13ZyfUAzzo", + "74fR86l78G/10Gj4u1DD7YhydS9maby52cVewVK8iNsyRAaY7MZpd12AQEBqVm1iybl+wysoDyByZXsZ", + "KOj6Y+sJQa2/QYAFM9IWl5usfPE/YiLlYgah/eFI9Z7tTsm2nGbs9Bov6w1bkztFyYtv5Xd/K49P0vFJ", + "Oj5Jxyfp+CQ95CY8FEWl7vM6JAXWWfNi8AE88mxYWYwp7PR878cmQPWKSLStKpuB2S7aeA/c7hDb2A2Y", + "KjbEyNquFse5yXb2I/11NTq5aezv7onb7LXdX2CZTKRFzlFZFXL83dzae40jlUGoNkiw2aIVznFcWqmZ", + "XXdX5c2cgRLPR7fXVBLBrrOlTwA9urKLPM8YFcOISrM0CDt3S8IaFsW4RU42GHudlr6xIsOIS2K+9Oc8", + "07f5YJ4RqNawpOXJvD5w5jW16fcd4By6QtC3HURDnzhRluttekz4FHyfzSNeiqoN6ydtamOAwStX65wq", + "clbt7DxOCJWvpi62in0M1m38FlJI5iJbvoXmw1nuOy2RqgC1n3w1HWuCPBP+hRWoKBV4BnnQzF2DdhDJ", + "MskYmHOYaR4eSPvu5Uf1H5NFJRWGIccI+PBvB5EBCFKMfw/jM31SfNOBEU0pzxok3jJC/+XwgHz9WvAr", + "Vkp4p3yNaqNf2A1P8llJizlP4MNJXiro8dCpub75CNaugy3Mu0eg58gY8GiqeUU19EFS1f9oGGB7j39o", + "n2AYo31q4s6nzEmbVrceOB2WgaJq0NIJXg0QrmC5b4TXM6FPIb5vk2eLAjTMRj1HSwYnCezFQ290mkhW", + "CGRISXW+BvfIUr/PwVyb53Xc0DtBQ17iqHuU36z8fthjh+3k+8MD2CszkdxemS1+9oHJdorsd+ObeA3/", + "D4V7gs91gCdQ3TvCbaprgEIskzTn4NUVK0ueBtCL/WIwfZe7Wm20fU7zY2Lse6/nKteCgGYm2/g8FH48", + "8mwCLyrJQSme5TOenAlzuUrCVecGadrzlfmUZxA6dMWALfN2+c5awKKDDh0prri6V1h4Hrey4PTes+ud", + "Dj4YSa99qBTuwWQjCjfvLGHEWWtsW3NdbenG12zMEP+ejX17+lPMGXLZ+HnviJZq2Rxtn8xleF+LbwOi", + "MEEOPk215lrA3rbv81Z5U9jeWsnua8dnoyKUFSjIHpCibA9NKb53M97XyaU2ZgBvTMUhw7KdWM4tw28Q", + "TatXs1Y1hHBSvTfqFfzihC+Mw+RqoatVrgsfpSnQBJAPr5axn10MqsZjCb6F6Tv6RZUpXitwOshSL2Ve", + "aqS6ZGqVEucXT4HTppn6JfyWR7leZiuLt8/xB7yJ7qI4ak1kPVl1I5MFhdGGuSJSn/UMcU2tUBrF968P", + "kc2FGDnKqmJSwlUdI7ZS+ZY7KHA2IcNv0/PbVTWuLVY7UItmMq9n74y8EkgP57K/qeiyGt8H4/vg554T", + "Y9yO4WVcuzyxN1t+0i+bHzrjRHxN/XxeU4eZbPb5+TY+uxSfbU/fsEPHjKo52BSOxqO0pFNlzATxFzQY", + "hJsRTKLOizJP9GmDr/kVK9MKrcTAALUSSZ5lLFFc8/zx6CrX9/Qq80EcM6bQXDczU6rj1WJ+btnO48Qx", + "dM7RoabKEmEFE0lelfCKoXJSsmxJciPuLRYVvAFsT8HveZte0YzrH1A1abxrJSZSNc5O6OYk2I0iUrEi", + "YMMvFaOOybMbxUTKUrNZ0GBAlW1jAZuONz6/e+0GwqeXJl72YIOoC1ZqRIFa/bYU3Bx+d8Oeme+W7rhA", + "dFKfjhVqrhAsRgf0LmHItqMEJVgWemb/Peg51W342g5YyqHgkHbbyjrXiZtOZx3H3R1fwQdOXWi1YIi0", + "hvu8rBYLCt5qmgVkWTM+UmBLHipPQ22mekWzKhjACWLZjX0pQKQkyRcLrhY293DX2xKcWiTM/b7GaZJI", + "5NPAWF343LRC9baXRRuHEhymm9RHG6gbQV+MQyadO/G9DhJ3vR4qdOWFIQZHZc1rcvDFMAUbKUb6h+xc", + "pz/kkNs6n9VD/AAjGxAV8cEG0aU8jHR4i9Pc4pyG+bTOeOcshSkhTNKNLbGrsorVulxIAVgCYSBbaESZ", + "0JD+8/lp9/caPxi36qrU4lwbPOglm+fXhCtPQTCnIjV5MV1AOEVFqkE6+HOkXJ2LXK305A8A/PWZ223R", + "jh2Xw/VfI5b/xj4atRV4AXXc5pHWW95hfeAmFPI84C0c0r7169q8xyjw/gOdATRYSXZvCjejiHhuur1k", + "y6Ae4j4l3Y6Vky/bug2eGE2dqLIMTSPs0niJI7gk05IFFED3I6x1uFEtnvUNtxIYw8CYc3RreLNAmWJK", + "q0wFChYZFb4FiN2qWkbsAEDcphVMxr4QHVqXuRPz+jPsJXdY9bVPvM1EKO4BqiE5ugeqAFKsVL6XXlFn", + "EAArGBaonUVkDqpgLR+gERbIm00OiHeJ3hMtnRqN2RziQsoec4ax7f30fontoEMVVvB31ijNyLASX6br", + "gTdWZnS0czAKHj2cZAucm/emS1aAFR20asWsKYatr2hGSnbF2XXT+Wt0tHvgK4oPT1798D14L3ad7Cu2", + "p5e8NdLHq4eKuxS0rUorfQm+4WpOZL5gzrlK5lmFQghXX0mwXET2jHZ/3oysTiGH5MvzvKUZN2NbP7n3", + "60/gZgfutiYU9SmCYFtGp+DApZUXCSWlbnaRX/nxb6HFCbFJeJwBXmtwlgl0T+qdX7LD7GnNi3ZTLdj7", + "wDjkwbo9jrUbZQu296j73I5K6GVDKG6mPEqyXLC2yWtthtVt0rxPwaOPBwCtLeWZAL9jhypyY4UGcrzk", + "KSuDto5FsTlgOsJR7hWFfFWuyyoCbtJoTu5Zj2kmlJfJnElVtqwOvcmHY4TBG01zKCFjx2C5A2tt0Fpx", + "Tfg123GLf029V1ALwW0VLokUtJDzXCk8Ou09GTcYGneqMZph7ncu0HkdoqKcCae4Nu1jIL2Pb7G2+UE3", + "q27PzbozbVWv9alZdbR7CGB8qzO/hlO/MCw0bFDTMm9+BWDE6HabSk//RFszEcOeAUouAfSCcTElcy5V", + "XrYzhHpNnAmqaiNqzRHWJLO7FXteAyNX+b40kJ9j1m5/3ruHgFuTlPHDdqy7R/iwIGHFWNpqVrdu9SBD", + "9PQLl0pzwGP2e8Vk4IX+nxUrl6SgJV1gvyawAmjyKTw6Avdtb1wdS8Cgpt1xNxCCjSmgyc7CSS7JbjvI", + "wIILvtCy/YCAA7a7nZ3xbcIPtIeys9ONSGAagX/trB7d+541f4aiMqh+jpmEIXftqqSyMjUUJCWWHI9y", + "wQyxDbKl8noLWFANrtuNbvH+rZmPkc1Xz8WIlbefh+ll4zmYej3jf0HLS6aAKRwiUZvTcESXWU4Dl7JX", + "w54DCH/HpNKHVVfqC5rWZPhrZcPDKYGfCe3c9RaIWH8SKyBhgBlN7BgaC0K/OFujTOYQw4nKhmjfbpxP", + "G54eaX0iKDmhIr3IIVNnWN4M26y8pAuHFI1oY6VFs4bO44SiX0nDzt8MwcU9Xnh7YHjSVxKqToYJO6Ft", + "73PlDG84lg7C0XWUvFcUnmT+PC/3aUEveMbV0otsGBK3wTPJFuboaDjk7OwVRbOPoH9VQ+FcFKNVQ3y7", + "elF/wU0JpHoJ7d3kTBxbcQRCSNoXQEwIKyzZNOo2TR/tfWQIJC9nVPA/0H0KDF69moDnQcoGhztwPzE2", + "DTkimTQXXynzQA3t2ei8RuT0b4U/R40d0fysnZgMTiKoxWwUTIziWeSlb1VZq0rGo0u2NCRcsHNX7VzR", + "m5E9Y6N9+7Nuu6Z7V1r/qrljcDjO5NeKWybqU1r5EV0bw7Auma5GPRTrFrfvfXLXIXyqv/QOyWAVadUc", + "kuSVAn2+5k7W9AtGaWrYkXwlHZeyeKnWjzSXEps+t315q4lfyFH9xS4ofnEfQrnnzJoq47KHrnmSLPMK", + "HNNM226G3iTAKBrp9wWMWYLwz9X8PKeVmj/SYoH+Fy34uZ7LWzdkbKDJ8fBst26fBoH+GRZxv5IN1jK5", + "FW8J2WivDlbpOvd+n4QtSZtr1FV0IGvGjUdzF0Ae+dT+5l037rYcbpLudR80RQ9efPX8em6nTbO07RUF", + "MvA+VYVJu9YNaYXJxYzlVdqwwW7fKc2lHsbrP4PwZ4ELKkZCe6hIaC8YlVWJT6bPyzwQJd2UMNb6U13G", + "lwpWG2Q3Gz/S4EGtlQXa1SDQJMoB4QafdK8qk4NrgRXgrjExCL1X6P3Xx8fPXp6eHz07Pnx1cH5yund8", + "OhqPXr56032JHo9utnS9rSta6tMJ/B8decxbCYYeHI9e5tej0GBhGp2h/nb8fP/x48c/vv16rlQhn2xv", + "qzzP5IQzNZ3k5Wx7rhbZdjlNdCF4pl5QUAM643mCI9Rn7vXp/j1b4b/wrfCd5dBRM7LdysDHoxMGW3HJ", + "lltoelFQXmrOb9tuRPJWOUbj9+2UfKM8epFXCl4aaqt9D+XV4Y9Bifnj7rePkmSL7ux+v/VfP35Pt37Y", + "3X28tUt//PbRlCXpo+/9S8KcCr3Ts3zL/LigxW84s7eNVQmFIt3DALJG7958cNM42Malh9CBOVlQlczB", + "ZILOZiWbaYyo4ZOSrUnZz2Y9X79ohMFcGd21NcBDcppfMkGAKHUnuju0GdEsflHo6c/KvCow1icA6dGT", + "0X9M8C+3Vv8xUUZA4ek6dbHBQdCzJNaURWbVbPRkpODXc2V+9QLgrpoWEJKhwiUOB9rpoqrG2m3gScLK", + "Pa9mzz1el0B7GbSqcHL+wiYcrg+k3rz34xie/VMPz/7R/OrgRIZvYrAR0kxCcghVYCnMmlrZiD6Gh5yJ", + "15JNK8hZKS95QfIsrb+13d3GYGyLLwI8oZkp2TAfvOe7xWM+oanCZ3euHItsDsIxrTVhjD2edstr7CVd", + "sJT84+TVyyOq5oTdFODGA9boOWE3Sm8+etTqvsjFEi0NZf0SjjPSVx7IPT+zZe0kaMJDo82hkCASgYlB", + "VsypQOtG+ArhymWir8gmxXkXRodJd3BfyCNyb0Xg7OB1+2FeCc25OTyIXoIhL0H3GFLnm8uqmQ3C4s73", + "/XkT4sXdRzxjMm/OKUBMeC+eiRea9u9K7W0E8SAOxJ9/XP4OZmrPI8DZ2owN4btjZ1zMmNSiCPC1ryRw", + "NmLg19KZMbhipnpekpPXL8Zk79e/j8mLw5dj2OgXe//y8ZQxXrFycUmoFXMarj+0NDKDLerSAb5+efjP", + "18/O91+9fnnqNzxuDh3HZJmw7WRCdBOduvUi2GWEjGczkZftjXWAdM3N1A2U0x/hHg7euIFo/Us0LN63", + "gGxY9TUYxxrBGUUQWJ/ReOQv9Wg82vv176Px6MXhS/1/9/41Go9+2Tt9dnI6UKY+qRa6baPLwPB39l97", + "V7rSC64n/gK06b9QxaQy8rZiZV8ocyua+bFZB0hZDy8+bSIcfe5ST0TcEXH/ZRF3RKoRqX4ApBpR3qeP", + "8m4L5HqTMMEHzf/8PEtAu9KHbeiWZU5Ls/cw5nwbfhFgJdgc9lokWrD1O1gmGrOrgLlVxplQIZPqffhC", + "Dg/8G1VT6KWLnwJ+PthDc0+m//Ut++4Hlm79+G3Ctr7d+XZ3i7Kd77eS6bffffto59vvdunj5uF7vD4L", + "FoaL3V8R8hbjvGrSvVjWOb2cEUZjjBrnb+1CFrStR3qR3btoV7+ByYtl833RvYLiuP6+/qrt72GlIcDo", + "hEN2c+wHyMretcY8gt1ovgFPGa0r0YDf30azQm19u6Wq8iLX8Fj/K69J6zeLKN6Gbs1pEJfh+179AsYF", + "OX6+Tx4/fvyjeSFrpqm+ZxjlQZuOLWAzhhjVyHGWMe+Fx9r5lUxVpTBWgYwmcyIrmDamZtTTuuYiBaeb", + "d+bTO+SXJQMj7rSFe1o01hA57kJkpvOhNG+Kt0ne/Ax0b/++G/GrPBDPQ6Qfjy5wv6w9wTCQ96auE8jz", + "3RUZLEHhc/wasgIILBQvWR12qSZOz22vQ39AWc3lOdj7dz3JU75g/5OLpnns6PXpftDrDu9f4xEjPCtT", + "2KU/cgEOCcbl1RqPHO693ANlFtEdkQOqKGQyh4fyJ9vb19fXE04FhVdy3dCWbkh+ExS1dIOvT/ehQ+iv", + "HWK6nidOYoh5qncThm2qTxEcV5nC68q7FlvMEiWD3/4MaQ+a/FM11A3+8XTxVOGMwZqPnuw+slv2TKQ+", + "kT863dl5Av/vf0aOdMGEoXkSXCFNnsiOw9/xQK7pAM6GJaWWY70Rjnqz4qIUB3uLIFQzQ2uEqvElYRCB", + "HxiE/mjPwnDTo3pH0Xukc9/2qgmkNTlRtZdpI8il3nVu/CJ7STRYGv3I2IwLYaO5G0+ce+RdIWYKOgGR", + "DpmVyofPCVN4tNMUfOq8GBzJoACR/I9QGFPHjNP1a1GXBQdKj1ObZe66o8H5eLuaD+XXITRe5teWqQ7j", + "Rp8wE+oL5j4kDYXyr6LWDkxGt9NhdTQsq3VapwFt1cBh+eHGewAZRgrHW3xlq3302VcBVJU+sFs7bbPz", + "q54brGA+aRzqvMLQY6ZFEzv6fYOA1jAqc0zXrev9cxuk3LXXw4ceX4uR4NY0B+0vb01g9Qno5Tt9Dq1W", + "B+CHFahz1Bv3Y3OOGtoeo31oqsFR22MWZFzrDn3jOZ4L3Yam6rqZNsxa/Z5z96eb959H9O6onI/K+Y+q", + "nA9twstcPc8rkR6V+UXGFr6HwrA9eS3YTcESxTpNhOFcXvIZF+gRX5KUpzDXKddMxWFTF4KjGRRU0XLG", + "VG3nkZfWH/LaOGqaEIZZLg1Y1GInJo8L3uovc3WoKXbBRGAGD7YIdvY5k35SCYwyVYkEKZkrVOTqOwTC", + "fFfZlBsHHU/BG5oUnxo/0v05FYJtEtSvW/kNu5jn+WVgLn5hTdi69NAh2ayfTp991/E1G+wO9rVwr+cY", + "MB0KyjovmGDXejc6M0Kla8JKRTk2MHSOmquEvDsMgwLuakNKaOlA9Kzn+oRYLiGh0ff0NOSbEe4d/8/j", + "lwfPfj49+fXb4+Pnz//5/Y9//+753q/3b0ZoVsPmVayTJ97d6Suw6D1OYCFarTezNdLTkJ8YGAqpvtei", + "wEg2ezsK7VnjKanuf5O3o8C4PgOHtBAPix5pD+WR1neKumM1EUpX8hhDrm+ePf3p1aufB5qg2UvmbXg4", + "9nM3fkIvw77GKu6Mh+JOfJ7eIKhf+YnR1KbTvJ08gW+r5KfT0yMyx9YwXR5ETvRkZ7OSPuiwY/WasAMK", + "ENgX47+CKTubMRqnNJP94SvnzJEllzbnZ0qQ4TemEb40D2yXweD0XzQUCAteryUrybTkTKTZsvGyFZyd", + "040aKg7c9i/7bJn4TECIrKQMerziZyLhex28sHVctAzOU1z/3FJ3wvgVJNQRqTWsWVD1hLy7oJJ9/+07", + "yECR6uuXijRfkIulYtLABYiCWpRsym9Yirzu3fVcsuT83YQcsyRfLEx+Bf4He0IefdtYDyx58v3s0U+/", + "iNPr9Me9+U/Xrw9fPJ/Nfj358dU0P6LTlz80d/5rrPTNf/9Gt/7Y2/qfna0f/+/2397++fjReHdn570f", + "jtguilm0FQBvA3gWulJCiO0L9SKoyqw7enMjktfHv+jBm8DTjdNusp82B25dns0vkyRfbHePhtf6Wt1m", + "n+28j1eNRkLPZCAACUp1gSzCeMbgFGCeP4jKBnZYzXzlq8W7NWjh87txP7GbKvLyyMvvzMs/bT64Oat7", + "dsWCEmGflAXa+0BkNSFyVJVuEO93z6sUiNsUDCBBFlRAUiwT/VgupWKLCdl3T0CLPEVDp4slpNOarLj6", + "GiMY6J/vrunuuviCWcgK7U6ve3fx3OdXrFz2JcMCdxdTxkvE1r/1G6tPgMgOmsN4v1IGwsG4tFNtpctQ", + "P+aV0/DFj388+vnl0e6/T//1z+N//XR68I9vfz46/q+j/9m5f/ED1mKN1FHU8S0310FCBzZCZkD5f0+E", + "3AmcXVbZLbWmx7pmT77nxth0FybadZ2/GuLtuk3tZhS6tTL3mTPND4xtLX9cvf9rtLtN7SqsbOcc12Qy", + "iMc/pRkVCTudl0zO8yztjaFqPnQVwoYyACD40W8nF9j0RNm23/Vg2M3eWodO4SD8Hmu8+KizY6vjv/bt", + "jZ06trh5uITAcnk9kwuW5WImico/HvtpAKMhvEhZfvFF3YlqM91yfWcY6Lia/vWJ3GADwmBzBXOo92Tc", + "bx+40fHpRrXtnpyH4AhereGMwYt8DcZIDO+5Xo7bDLJtgl0P784Ft17RhxcA2zPTG9b+iamwqn1XZjyq", + "qezWl22bEn4F07BV/buiDSO/jbdrfUdeYWJKtw6CTzL1bvrWa9bSrXEe15+Pg/vGyS0Fzj3YQcBr/tCH", + "5cZwqdLDpVLmCQdWrE/tZOhF4b1/lozKvogS+M0lWaRS2RGYFbMGek2u/xwz4qLlTAHh8YyRGKYENaHG", + "S8LKMl8pz51AH8c4xJAKRhmrxVsikCaJQG/BBFwekay4UJw9fEjRdPJ6f//ZyUkI0m6sUDbE2lYnf7Dr", + "eL2Gue0qCyvriK2p1LUH6RaH+kQFrVY7J3vDTXPxUeyWPd87/OXZwWg8Onn28uDw5d9H49GR+ettj5zb", + "XZSeOClJwqRG/89tkuYTBkG4dR/mr7ehlWizYXP9P6Uh4wv9K3EmjFQsHQhA90+PS/t/O8PueMvf8Zb/", + "PO7YQUfQxJ/HZ5Q7yp02H5IRKO5H0DQDjDJklCE/pAzZouVPU2i0yZXx/r2fw2su83h44+H97A+voeVP", + "8/A+hPVvrZheZ+prHiI+K0NffA6NZr4fwsy38VB1d21LynX1hSalHKL0L2hRmDxXa9S1d3yAgCPidWDS", + "Uwxs9FiXrltqo4KhzYRR9rjDqDZsr3Xx146Oy5foB2md64blBlk9+3UpQgZvyMYNhVfvts20F23QSWis", + "xD28ygEVPtBL3CpdQgRiEYh9rJc45LyfJBY7fdgXx+AV1L1NxiHguhLFHVfZOvs6XeThb+DQw9Wtb17d", + "mMfEjnuWa2BLzdvjdpeu1465Pu71sg2u3ib3W3DFNm2gtVC3rO7WZ93BC056NS2jiVFLxx2g2D4rbSM2", + "9SRazqdhKQvNeKvMJOBl9ma6raMivhN2zFrhAZDPBD62HVd+xBUn6cQkRZ+rkxcQ0EZ285oEVhvN29Tg", + "K6KYgPs4SXKhKAdj7cyQuksrfhfqNm8ulqIXXNjgkJ13maGWoqvc00pzl30c3zTYjzs4pmHYvD6HhjUT", + "NZyS1DyuZDSZI2H4A+xzcHAVV7C/ukxNFRB7QsJT/wUjquSzGSs3iN830LylGVm0h5T8tzG7IKf1vALh", + "SNf7H8Ak284H6y3IGmv+5TqX3d6Vy122DdK7DSh4QBevjw0ouDRcN21z3ZYf1C+HB+Tr14JfsVKCT5Dh", + "Q7+wG57ks5IWc57Ah5O8VBBxqGZR3zx8hrBunODQ+d33aKId4vrzu1Q1aUF8XAyOz4hMchQYG7t+sbR3", + "7YQcKrKgS3sd13fwxZJwGPwlWz4gGZyJPd0DRqw2+hk/uD+XLuGrUdss/bSukFfg1cGrJ2jWD60otijy", + "kpZLIvOsUiZ3gQ1YdJGrOYFRU5GSn3XXxuhJ33yyYAke0DxlMyYm95GA4f89AN2ugDDxqo9X/RpPP+UP", + "210Zt7kJf+0L4GkJBX3x4ELzYr/DWWR4icnuLXZ7J5zeMQ5wzHGr0iT+l69fPH12vCJaKbS/uhF4fQtE", + "L22bSxv7qk5c057YnINCO61ekpUqRrzMkD9edHiACfeHvfgEfPTseP8ZZHkza/e2R6PabVOFiDlo2XjE", + "ygTtzV7iIr0NzHsNUNs8wFoNz9rR1T68NrM5uftUbbZbvhc9Z1+jd1J6tkLoPbAGtN3b3dShd2tt1eLe", + "TVHaDUu4lr90NL230poCzUZNadSURk1p1JRGTelGQUvWSxLusTsqCocqCm9z9X143eCDXptRHxj1gVEf", + "GPWBn/mFtlIdthG/b9mkDBV0WiJ0lHKilPNXkHKilPDpM9WAY2EUEe5TRFilqnsgAeEDXTdROvj0pIPI", + "mu4d7FkL4k3Bng2cEsFeBHsR7EWw9wlxVN+fJ4K9+wd7wbfUBwZ79rqJaC+ivb8Ob7o/tPdpJD/8XG7F", + "h4mU3U8lK0d8x/SHuo1PLvehHtRnFg8FQ7PHcCgPFQ4FU1oHeKvJde3SEEtCBaHlBVfw8lWULOFSkyqO", + "fdJkHGdnW//9G75VnZ1N8K9v/jt4U77aq9T8kf4/ecn/QDkyT9nfSyrUs7LMy7BVKVYj1K8Hj2pkpmti", + "qNbaHNi7EWjG0/PSWQ1WwrbB0vMk42gCSiHK5XnKBIdrqhLOxvjcnopzcxhtm/AWOhqPMLXxOYxAz9g8", + "F/JseV4JekU5pt8OndYjmlzSGTsqeRI8mPCVFPozPk2aAwf5XfTFygUpsJSckGc0mdt/2gdYSX6vqFBc", + "LY9YaRsEAhmb9Pg8sff6mbCVIX2M0q3ThSYz1znSr1+JVFLXuOZZRi4YYSKvZm4UXs59miT5Igd4TU1G", + "Z6gJTT9D6pfk6xm/YoJQNw3J/4CeHu2MMQ2/HZL+8T92d755cia2CMeh2Knq8f/4gz9BO7zv/vM/dnf+", + "9h/f7Ux6qv3ByjxUcQcr6lFg9gfMXM1LqYi3aiJXpKjKZE4lS/v60HPp9rCLPexiF/XKTrnS/NWEgW30", + "2N/BZDfUxSPs4lHdRZ3Ui+xMdk2PX2smTU0KbqSLkl3xvJLEsKlvbJZuqVEMu3YD6ibqWVhmOPCaNxwq", + "HNXFEV4umN+ny6+Dvb0fj7pUf19jcAuN90JnDP8MfF8ReGSOAMXFqoGz7nEw28LbgbjVLHhwBUJXgs+C", + "3nA1388XC67ggXwNR0LZURZMpCSpa306NGAu9L177d4mZNPnLOMLrvCY4DJQRRa5xNg/hnN6I3thAAat", + "R8jFw44Q96U9xozR/kHikLxBxqM0+Cgt9Qk4qNhBMOx383t9Q9d3GtyWcp5XWar5dUG5SzyGF6MNZv9Q", + "B+yn/JosqmROBGOpNG5z/jDsADpB4hH6J8vho9g3NTT8CwzlcEpSPp0yECimZb4wEbXg32meVHotv5Lk", + "gkoreCTL4NDSioXUjm+sprHAfQHNSsXuOS5VRxecq6DhHSh5UqYoz2DdFb1keO1r5KSJw8YaS6u+bQil", + "9jJeToN3xbhFwUnr7En90bmrASBcQbc9BNM6cbhF7sitOF2nrFysO2FeGTRfNGoSxcoFSt92y3ONNa0f", + "Ws/pwk0J8Bt2o8yO1Sk8c8mEax36G7RNm5PoING6xZHaisqeYdWWf2FaPaj/5SaeCwSSjeUdNPU1Adlg", + "y5APGd2xz9LTip3rXRvM03Gh19DXoZCKhkT4bpn19AXZUguQV6x+8qOQ2Ke/mdws+7C9XLOHYTVCq0Bz", + "9zYkufGKATeGYjKWLodw3y4RrvPFC/DFAOP2RrOaZCcw+PoSWK8qopZ2KClcPS3Vf7fzfzTDcgVZqsXO", + "73aa6q6gX3PDe3k8utma5VsWvj0ZzbiaVxeQvzYvmIDXLp7Xf28Xl7PtRZ7i2wtUNi3ijxP/koPZ8jwY", + "8LOALyjoUCIVLRVoITSO1hd+9yRroBIgO2wHG7AVbw8yuscu7+3TH2q7x0e37bF1HmHSMIrgocxoIH+T", + "/lXaVEvGyj7TF7amRVlduLIhgTLjM7FZdpc9V6V7ONw3zfmmfFaVSNIWcBUZFXAsLniWcTHbpykTSW9e", + "H3jNI6YsSbBwd1qkkuiVwCX2cCYOzMGc59cknyomnCwnCS0ZtMlSU/Hw5NUP3+/sktQb7oKqSa1Ne0LO", + "Rke7L85G5OtFLtQ8W34z1j89hp9+r2ipWGl/3P23/pEKUdEsW7beUI92XzQow3TpiWpPm9MNEennbOtz", + "L9KNeeYdvT45GIUFd6yCem0rxQLx+cnwzUi+JAskf+i9LklpF6k4vx1idSu7O4++JcmcljRRrJQtfxv9", + "1R9X3U9gVGw6ZYniV+x5kKebKNMMLgS9AvUy6z0jFyzJF0wS18yEAJwXubISB0vHdXnwNUpLOn2gyMjP", + "7DjMNZSGcoD50z7NN580qMBJlosZKzeZuSsKT3lTLrhi2fKhF0LfjX3LsGkEcEeKD2580jevw4PQPC7Z", + "MjQRyRZ8a9hs7uyv5nGvn9kyaD5jTCSGs1drVBG6zus3DdtucF6iyvBlrrWOrukAlglby/xULajY0vsC", + "pkhgKtPpkTxl6poxQXbh8Dz67vt+PvXou+/bC+2YFpdFRtEeJ5jLfU4l63mrh9MGBYgG/CVP9JVd6luC", + "Zll+LcEQYaZ/pFD4K0lKUFXSMpUkv2IlHnqqeZWPZjSQm5VMSibBBRM7kddcJXOSJ0lVSjR/oah31icP", + "JAYLkxBpjwkTsqq9NSnRUAciPnl9GTEan7U0U+EiyaoUciSWMyZRW1grD3EwoA6Ww1UnGRVHc0gw0GPe", + "deRWM2ThVZT5MRje7QOm3EAB16rYwA5/jpgwhmNItFqgGT3RvemNOsdJdu7U0YFBpUWZb5VoD9jFuqvh", + "qXeKj3pasSlPK7nBdDMqTAbc8CNBMxeLQcr7+aKotEB5QSVLSY5XEGtdcVZU0zxewkMx3K/kb/qSalzv", + "+hvFqn9rfiFn1c7O40RXuTZ/E++KhIplMudXLCXbhItuK6e534auoOeeVhrKh5v1+vWbWZOItpJfhp0t", + "xEnjKVp6lWVerjA4rUuiBcjw8/1rsw9g7q0LoW8Kv7Y7DRz/K1ZKB2fN4d1tk/evWKhB2+RQJCU4KLO0", + "C668rTFvh2FFrh2pGcVaiyIwNrMmjz2GzZdwd1+5Jp1M1BGMHRdw11FgT/tUBXtp2pfv2X02ssCFUWLZ", + "NNMQi8DcsniBoc1Imm5hgLmWGsH2NFCFAMWDeGNLbyLMYpWhoWlgPKJC5Kg224BR7nmVuoM4YXAeLtly", + "CyMmFpSXkiyooDPmHmPkUiq2mJB9GAG5YGSRpwDHdYlKspXZrhsjiL47n4LkrJFOjVSCh+aSLX0GY9CQ", + "e1DFw+GkVWevhjphY8o0acSaHNSQqUobCl0P8dMb+7o/1BoT8uD4XSUgZdf2Vk2F3Zk4VNYkC9T4iZsW", + "1pfGgAURJuryk9pc2LPaqA0VzEJiA6OQBehHEWU6oksEAp8GEBjoM4Q3Ufs4b3ppoq9Q8B0DrkI8NeiV", + "iepuqGDDlvZckIc9yRJNc10dAhcYDyeU5utBnHHq6zU4oMg3I98czDcDL1v+gbQnYuU53MwRJHw2u64g", + "HfiNvOScesxE/yP4GG2H9hm4g9QyQPQDeSg/ELfGx6zIqHU2DbmXGkiA9EU0EeB9Bw/p4efvyFcjX92M", + "r/aRaB+gcWRpAMxasowGA5+lwcAn+uj+KT5Wx2e++MwXn/niM9+HeeZr3eaGSFFCWfUsYJax777fXHC6", + "fzHpM5GQonD0oMLRCvnlw3DXgIvApwg7HLALQ1vLdiyssrKbDxT/3QMU++7tAw9LRhT010ZB+lzt62MV", + "pj//2DWB/SA+e2xa94MbHrsm1+n68SIyI/fouh5zH/M5ZoBokqDkaz6B1yi7oYlyc1ofNcixr8ODjxAj", + "K3g43ZBMWoB7OX+dZyTfGCPYuykxGWgp0QQZa/fxUBSVGr6ZViUAwCxv4ARjXeQNt7nrX8Ya61n0L+r9", + "aiyjauhzVA19mmgo3uxRvxH1G1+sfmNTdcaJM4VeZdVM3bich3FJpxiUTF/2+g9jYDwaj5zpcK8C48Sb", + "/r4+B4GTjr83ydFZUofx5D3fk2/gXLjLUjKl9wGf0xrDMlEl5vSK+ffmnkjmmCa3u7b2MFIoYzm/3+qE", + "YCQhcD5F+3AXJEvomynjf7AUIm+UqQfD2hex+VkwWjKpSMmM8ouRCzbNS+Z7/JLDKYYHM73aAF0mslZz", + "L5ozsEOrZMAY626ewysvUj82gL0IfPKaPPwl6CIQujvQGvsy45fd2dvVUW39OLaNubT3p36hhiomcVhw", + "yoXxcB7u8dASDXoiXenOS1tSE1uC51blE+NqUepTM/CxHa4PlVuanHeuo8mZCNJooxjQIjbBG0Hw8D5u", + "itmtu7/jts4XJsH1sJXz9+sU6wZWDj70wG9cwHFt9GhW1HAZCLqDHheTM/E8L30k4S8DLgxNElZoQgST", + "a0lSBhG2jDdKY9kaw5l0lZU4G0NKvReKz9p73sbx98jaPz5rb87VlX5Ibm5FvD6bzcMDF+PFlJyQIxOC", + "gXEXZxy4RkkODybkJyoJhO/AVUHsjEU+ggrJjvrnPjWHx+8GznC9xBKvzHhlfnlXprWL4YsFSzk6wT/U", + "RerrsrgkrsvuPeiuP9+Rxxj1wbfQzZiXiman+SUTocefJBeyWrCSFFCOKF0Qog4b8/28JGnOpPhKkfyC", + "LW1oWzTfs6b/pL4yz8QJY0/IXKlCPtne9oIRSZUXGZ/NFc+3ZcESVdJsm0tZMbm9++i/vg3cvFl+zdIX", + "TLHyJKtmKzLyjgmfmshNKeoggM5sOAViUn7Yy8W03ODRv41g7vIcnkb1MjsVQk8gr0GJmn47fr7/+PHj", + "H99+bZdE5XkmJ5yp6SQvZ9tztci2y2miC31jVIvK3M1wldkMvVyQ16f7DxyAkd0USG1/9pX1smNgYfkF", + "TDv0HvTJ51lZOytZIRt48qc3Envzb+2GY2UFGQUaHlwycLOF81UyVZX6tFHjKWOu77qjfHGOTOX8cE8c", + "PD4q3rx5tPfoTfnD4sf/nf7Bfsr+/q8fbhb7/7r++2T53e/fnmztvfn9efX97/87pc//2Pnjn79/++yP", + "Rz8cS7H89fof0+m/vvv95sVVvn7eLaZpFyEoNpTMhfN7TnnG0qMyv8jYwjdvGXaVvBbsRjO1bhPdu/iV", + "AN3sQgNlL5wgBrHl1t8McxfNGU1ZaROjMC1LUROxGDLimDuGSVV7+mPM/UnwOugJpm+C6MPIpk/INKNq", + "TCrB1ViPVHFWIrtMua624ELfDLqdBS0Kc+emS0EXPOlboQP8jCMYj3QXfUWfZ1TZcnVgu54Af16SAH01", + "Mtj3cOFT+GrL6un1byc3I3jvrqUlZOR5gov6fjzKBRtAGPVc1sUq9PtcXdKfx7qyjWVfHy7RW833b/sI", + "yAuY2GdSVQfgRDWu3m6Xq8GSGRfnNL0CQ/68hH+VJaNlK0mFLQMxJW2RsIZXt68XJ+jmB6HRNYFMzsSe", + "jfMNcdLhi1sODMtoYA4XhNFkjvW6Hh1ucwczCo8egiC9XihvRDaesBlE36vW80DdEBeoHKVtwN/4ymHr", + "Jm877NeBusFhF6f5/UWDf11oJkpFap6WnLqD12lBHGI04ciRINycUL6psmzsfoMLsmBii4nUSHd2ltCf", + "bbnr9OHxvHp/eo/g6e2ivAPXNazPccuxY93jFWHgdced566Weq0jDXlvURdsTq94HjhF7rnLCweCFBLO", + "9uY1yiUxtY3wFXjJegYFvFrBVG/4yLbxA96LrjNF650uFEVe5WRORdoYFUyg+VRq5EbZ8y4HQ27TkV1M", + "M6MwAfmDD4CBRg8Ns2IYNexm70BdQoHmMvQQFDwoB8cAX7xYJtS9P+ONoqi8DHBkgHHdBhHeaXoBxWXL", + "QBceok1VT4aouFDffxv0HJMVJEXqdnSCH1b2BJVZOrgzFEmHmwNr+irKHAY4rIdV8RCAsy2YYShmC9ph", + "EO5TVdtB8Imdid0hXJBwureazp2JYgANOJOHRsBnay6BsbHgyC3MRUbJlFFVlQBVNMI2nHUVItbc9nzK", + "2DobSn1vP2fA+SWdsXN4klhX6bUu+hRK3hWjtsexDiaGhrBqA54im31Wr2h3S7yPdbhjNB/B2v6GdM/9", + "B7MuMlQw8QO6W5Znr5Pbx2i3K7bxUqHdWiVRNESaNlY4rrBvUXEmnuNEsGJuEuE4B2EW6MMmxlpCFatu", + "swKrPVDrDoVdpDW0FaAZeAtYJd/Zui+wWLOuVFT1S6e26gmU8mve1+EKDGroOQsNaljNwCquPKmWAwQ4", + "JggmU8YCrJNqMQq1dta/W3NJah4GAdywQDz4IWae7adHa6royO1MYPzcKssIV2TBqJD6D27GhZeX6X8T", + "X4rP1tJSnz4tJW0QP+3AVQmLd7bJ7vKT53kZoA2jJqxzHrgmkOG4DJKgDsiWXiwD0GihOIipFn346w1U", + "Q01H1qeGRw2fcojVhiffQgJt8gsN39wSP7Olm8P78aj+NUzrFmGoVqIyMwBg7ZW8d1cccxOQy7BLTvQb", + "+otZF99SofWGq7mvGVyTobCXi499nOWhbX0SpiVr+sjV+d1Guzs7oMDwdJO+wtDNFHQg7/t3z+mS21un", + "6M2mhr6nrkp4NRS9MW/IvUtSCYO0jJKpU8NbKeW9JXcLujipsqmZOnUlh+cPtNyzrVwCcedt0yVMlyNq", + "g/TyDe+wrmFxr2ZsBdQKTigEcm0+GwM1V0sdXJ7kU/ULX3DV0F7B00wgZ5+0pf+mSc4aQ+jhQ3ycSrLG", + "jkIqXZPC1h+rvhJu5rSSSlPFnMo91DmAtpJm13QpyQUjug9/n/VYMS1nUAMGb/F7U8XKYyZZYMn+nVcw", + "TEwqjelwaaXyhUan8BBKs1zMJE87ogfSrjm1RCZM0JLn5NomxcMnRLQkNFYo5IJmVMB7weHUSwOp71P3", + "sD9npRZLzJCcthbf4/uH41n6uKZcMufTOVV+g3N6xQhXX0lS5lkGRl7ObM/af6AcRMk1XRqvBr2O+HRQ", + "6tWsfa1wKczksAd8TIXf85LPuL54zGybU52ciRcUHYfqJZNVMq+XAFZUg2A9brTuZ+TMcMmz0Zic6Wvh", + "2Mxkz/2sb5QzfYO0P9m3R4prC4tGFy00bXNTubjLO17qBcEVp5kZoMsb2kxj1aW/o5LnpYs41Rcl+sDT", + "3mAHhalXp4Q0DBE+T9oKsR9GLheuvjW/a8aOdnPQY7MzgK3FXbWdfdzoUr5OAuwRyyv26oqVdMb2lHeY", + "13AnuAaRCrGyPmu2PXjph0mDZRu24WXihkczvSQqJztNhTU24Bq17QSZUFulYiX+kPoYOu7LTwbRJIRi", + "5RV16QFDPB2cAfW6yD5j187FvMZDD7RixIzrzpqgruy/geoMdR6r77Ck5zFHL+A/Tl69JAUtITJcC034", + "jZLTOZdo6A1ydybz2kIEBKJkzpJLvao+F6Z4bcEbnDLIZFplQNeWs4LygAu2NSvxAc5Uqi2nc/8MjAnX", + "V4wJEc8FWeZVSfJr4cJ7/0Rd/kI/Lnmtvf6TnOEpxp2VZ6Mn5Lczk1fvbPSWvPcJ4H/lR3Z3XKWQNDqv", + "ofk/DSmsIsdh746Ns9KBh001d+hkBxTMoXxD+usW2u+HlFIoajj7fij+QEqoL9Vp9wFVSTIk8ZyJ532q", + "JKMxCqqUooYoaoiihuhT1RB1ufkqS6L7URA1Fz4qb9Yqb9pX8sfU37QJJWxj6NMJyiAtKHCPBqtvuJrv", + "54sFV/CQOtR+ta0S3cictdvnYOvWbtVBxq7tavdm+9pRDQ81he2OaLBl7KZVV233JnaznbpBSrcPo33i", + "qyvQTLMtapkWkjcJ4+zZ1okbL9FVlji2Ic3v9/7t/XB48goi0Rx4+29dcnq8T/c8vw3jfapFLGr0mWV7", + "Mm1fgY0NhlzSJeyrx+OznuLgq6q5L4e2gRVGrybYubuMbacT8hOrSi6tbnRBC0kOT15BHCGucgFiqGa/", + "1kMaPKq00IzqLFvWeUY6fZodVGvP/tx0iFo+ttGN6oQkQUFmJdt369wc0NjSy4ATgL5svbHAPvBhiIR/", + "F8IP0mofyQygjUN/NmJpZjOATMe3mvMzjYi688ZCjShg3h4DtukfOrS5+QH1fCXepXT5bkzeXTN2qf8L", + "gcbegXvOuyWj5TsfzCFDf/Ps2c+j8ejFq5enP43Go38/2zsOa1vYIr9i4PV7MudTZeFRQHQvWdKJWUqk", + "roRSLTU/gTZYt9rAmILdQLzZkl31DEQy5UnbgAN7eQLo32lJ0bmza1Vuc4OuNGqleuA8mVs5iilwz7VJ", + "t8cWkQOzFvk1RlDAgolLFGg9lyvQxDWDLDitqCorkVjnLVBHc1EpRtIK3Kjn+TWZc6nyUl8YqKsmIFhy", + "SfTP9x4QofVUEPLXV6xcgDbt2tje974O5CDYgw/bGEqUPLXPT5565CtZB+6zDgFnYousfX6wpbyHB6+Y", + "7XoSfFQomaJc9IXO6JklihSGbxveDmRtHEHysn7waOTX3TOBLzrTWtNiYIa9NVb1G1iC9wEme0JFepHf", + "7BVFwIgdvxFaFDZxS+VytjAJz46vCibgod3KsBL0d5D9rChsMpf6YVcs1dw49LIbxUpBM6OTl3qylTXa", + "k3TKjBpL93cmrljJp8ueLrvPGTHx5kdPvPlp6rJ5+BFhkH7yA3tyW/R0EJpHxqXaKMzFC1peMgWRYX8x", + "dcOwblEXJKYXtGYAvypIugRxUc35ti8r3bS4Ud16n+rWTbPG7xVFb9L4k0bCeODvuRCI6oL72K9RpEXx", + "lUS9IpfEXBk+3JP4U/jt/rNPwHqLJOH25HopwHvf/+vr+b6DOsfwwF84v3iQIxuO+rqOfPfNG+VeURyY", + "zQ0jTVuQ7BUF0UUDkfgQqQ4M7VSj2/BdV99m0gO7cNEBuVwwMB6E2FgBttiXQUA3cngQinzFjTmhNfKc", + "ZfkFnDOUhiyxwChMVsMPlBoYhrwxIQH59dGO1/Tp4IejIB3h095r4Z7PP0iIllMXRkUfFJNgIFuSCn3J", + "a/9tP1aLEeQpGGHlEGVOi6hZTkFadNGJyYJyoZigIoEgYTyZI2lk/JJlSxOhil1hUDo0N5T5gmlUT5fB", + "uC4neakgD1R4u3JIEeXUN/6u7Z3sj8ajg2cn+8F7+qRgIvWfM7onWJfAWGiulAlr5lso4Fej/ZAQCpTa", + "IBxGGQJXirF7pfh9kdvP5sYxVrpd/0/8fn/hIdrjB7vp1ujd6OpReYlIvfGa+OIPO8J1KxwYZGPNe9QE", + "quQF2zs6/Jkte1RxeiBYjOwdHUKMQK5LTs7Ea+OQSis11wJW4izsVaNSd0MlS0qmsN9AELa2j7hf+m3/", + "NELKjj3vLjAj0uwtYBrY0C6sgpr6dljNsz0hLqEFveAZx5n/1jlfOCR456dZUqG3r6I3ELPPg2cmZD4A", + "CbDIgcUq2Lmrdq7ojUWpT0b79mfdds1UXGn96/txz3BsZ17iDNhWzQNrQmsMw1Q5dzXqoRyaaP/73idn", + "Tw2f6i+9QzKeP/ogZBlLlCR5paSiyJ1KdsVEZYjP1LAj8ZSSNnLRgql5nnaXEps+t315q4lfyFH9xS4o", + "fnEfQkKZWVNlobtJ1bDMKwjTadp2M/QmAckOkH5fwJg1DY10gfNcn7pHozH+ixb83OSOMUPGBpp3Mz7v", + "Z/yKYUAUk4GAykuW2sM4kpfnusT5f3r/oxfJqNuyFV0BQC3hBziHCZjoHepjQpNEne8+evztd9//1w8/", + "dkbTEBX7z9z7qAeMesCoB/z09IA1K2mv+S/myxieSKyfm2mTQ7qZtEqcJmPSH/rRD+PU4FThJJ26hEUq", + "1jpXzjW/rcMP/wAIFPRMj1t0tzbuZlRlfBmqz85dtQL4UixlgqavJZHBKhp3x9cuHXAtRp3qGp1qd/s8", + "XtTiEysFhmM9mxLtk16VOPxXJdx97FX5z4qVyyhTRJkiyhRRpogyRZQpokwRZYooU3zSMkVLs7xOmd2w", + "iS+olNd5mUZhJQorn6SwEm1FIjP8FJjhAzCNTU1QoJ39OUsu80qdMCl5LsIhz80cW2Un5vi5gTFVFeFX", + "cuxqrbGL6SZk6+IpBGSjNRBokkqe3zT+FxKx7mIv495H15rL1OqMaC3TvP7b27biOLmHe7yDexozoYmM", + "mI+y+JqGw0qHvm42tPCpT+atDHwCa7Ti4DZP09NgTsK+E0V08YBRwWe3RW07h1uvX1OBeajY4mPzp8gU", + "IlO4LVPAtJbmnu4lZLeeJrulNPf6mWilqUzzRE5wGJCrkhZ821Y2Wey2TWW5bcYUjqNmvEND+9HMjmND", + "9WM3/I9WTB/s9F5G+v+ZNHzm53P8dasx3mA+4X5t574NsKkedITYy/06PfLB2Z8fgmp6ZsrTsDJunZrr", + "IcfkyZ9dlViWJzQL3sdarJ2cCUK2//M/0Qr08Nnpc5JRMavojBFFXUgbbKSz3hpTotQCEfwedI44jcDa", + "YyCG12UWEqIhWuvr418ecmg4gPOqzG5/rdQ0LZsMMcj2q9Bk613sZkfXP78+/kVzsZKhcXHzAKncWC9D", + "0hCIo6tFD3g+OBNqznhpjachsCOEW5wM07R0VmDc4cANHYqvkqk311EyTr//4jn1w0etDAWlUUgt1Lbv", + "iJ6EW2mV2KBPQ061ojf6/2/p0rLBH9VNkp7v7uD/msAGPp2dpX/+0MAup6bXtcue9OUTw9m+YRfzPL98", + "dhWMUWpu5GssBJGtVa/zbk+0bl3HxXZWVknY0EhwoR4/CgbjTYMSed1uGvQ5yW0G3fZi5P1ZZfnK8fdg", + "rtW83j1W9AfM7evPAuEBR8rAse6hGZnlW7v5vlPGyv0vTcGgl8/h55iNuQufVjDnz282CyaliRHR+aYl", + "AlnQhH0JUw0oGe3cxoY4g8egzrXdCYNpIvxDQqLwkzC10fSVKvlFBQLCxZJwJc17omnehEJlN1wqG3Qk", + "yUXCCoghAzFDuJj5FSC7l1XUa3kDjjTolK/z8pJQSSC3WsmTOciGVoq2w75kS3BMsqDsJV2wsVOVjwlT", + "Sbs/E8YZnm6WeQW/lQxMi8TMTBW4k7E6cTGadYsQPOnwgFxUilxToTBKVmljtNhhmTQN84AuPS/d8CZn", + "4jmk2pYKtAYJlUyOCfU3Re/2Fc0YdkUbIMnTenjT1xKQxTgvUQu93joLbX5c+nXguP5Dxry6kEWO9ito", + "uhIGeqBr+ceLV1mi5M+//hCwUkFvNQxA9EyYM1mULMG7NZRaFYPYpjXEgyZs5JEWSYTC0DwCiWznCfy/", + "4dJYY6wnipZq6GghTcTtx7t7u/E2iKB71FvUmHqPL6sH1SanzmPTXQ1Ogr1+EHuTgcGCcejj9hKumIqW", + "SzgmWl0WNgFJg4UAZ3XSiHm9qqfvzmJ6scXTrd1Hj9c+Nrq3wiP/yLXNktyb4Mrl7zvyPXtf3zVh4W/9", + "kelqGVeTR4vRrKXKEKa87Huxxg5fF5KVd7k1Wal3GQJMLTdi2JEdR3Z8f+w4MrW/CFNbwc9WWMr4X4Gj", + "CcJuaKL0EL0PQirIeNUViiHA2/My7wkiafNSNE5h2Mb0zgp0HMtpvnokHvd6qHFkfCZsQpyBBneuSsAM", + "yH4jDTWiIybImqz7NfHM+6IJ6kUQegIZ/4OlNnGIid1ntbHert9tVfqs1542+g0t323SnngHyxWVmEEJ", + "wifO82uSTxUTngeHlv10OywlldSN2YDDfiDVBTwkPcNlkE/I2eho98XZiHwNUU6z5Tdj/dNj+On3ipaK", + "lfbH3X/rH6nArGgtfcHR7ouegMbrFm5FppbP2QvAhKpdDj8z+6bGfp7aQCkmjdjo9cnBKByUAquAWjlI", + "82fijUnVV7Irjpbeen0YoWlKFlWmeN2KSfziB66wg1qnZ2uEyPBeQ3rP3wfRpUVXjOiKsd4VIxq53l++", + "moyK4ct4lFFxzKbMxPQOJ6nJqAhzE5T/jiHo7aYJZ45aFRvs9s8Rg+BTDgvjc5HuraSKnUM+FNk5lyZX", + "Sr5VYhzeMLpp3ugraPWop6Xb+D/4qLjXEcIIl54zRJt7d6xN/5KuBZ6I4HkXJI33cXtrBpLyNFHtOgln", + "L01DPH+vKc/QNN3KxZiUDKJ4oxutSEqmmJN1YFepLWvUOhDKu7PPn4xItFbF+ZFEpPXjCm/bES0VB01D", + "kRfgpp3a/ajXPJD8eq3VCTby4cwwwxepJTWbunKgrKjX6tCvusIwXm+nn2Crnnjvnd9o+VNJodc32p6U", + "elesrO0v+zI060UyBe3y7CFxmcQLJi+j9DxBjRLEz8TcN7RfzRi6Nh996uh63C3a8E1Y4aQEuGB0AY9y", + "R5Q7otwxSO74vaLwMBW+J+3X1qVB9rJrupQEUnIRycUs824ZLCQbRLMbzrv/T9t7yBzOdh5iBs/z0vDm", + "IucCDU34Ag3U3aA1S9DrmV2BHXuHFXwHrOC79Y86fdT5z3qEIftckypShtfWTx7cvpK5YguoNlQ2gcvA", + "5qZE4+DwkI9dr/WQaVlS0FP5cHaAwe4HVVH1TchfhZ4Q0XzBMi5Yf4ol/bVN4phDyeSHx1dC1BTLvAT0", + "KVItKiguqrxqEvtvTehfk1rz/bCG4HWJR40S9eHcfT/ua/TR2kYf9zS609/o495xvL0tdZ6ahT5hM3zf", + "6N9TWzRAolFwpgb3/e4zn989RlovXus8+yxpkPiMPjQDhWhrtneRp8uALByW607diasN/z5pMW7dXg4B", + "6DFiQQRVHwtUKb7YKHiSzxNOsW5PpnH4aOfkonZMyJ51r7EMIi8NCx4TSgS7JkyocolusxfMeU8Y22HL", + "zhoJxc1AwtEWmrwQY5kg+xnE9ByKCrA9h9mMFjDABgOsD7LfsbSBVBRbHPYhw8ODoCKZwL3rRaSqR9OM", + "beDu58/dor/vkt0zK9pdHr12AdRQens6MNmsw9JBam8kcO9g6w5luv7HK6lhEH22cdTA27nHnSma7dwP", + "+3Z3DT4MoMCwiluvkynXawsbqNCNeRANrQ2+1GbVMQxTBDUR1HwoULP6APtGhX0GgilTlGfSeCWxtE5o", + "Yw2freFczama51l/10QnX1RSQcNDzF3fmOzENMvIU9OCwS2aNu2tKsmikoqAfeTkrJ4SWTAqMB7lUckT", + "9pUkTxvPwF49oKiLHIIv2/DBwqUg7ksz7AzIoU+WmubRnHwDMwgs35fxKLjEBCJuzqm0+bZDEE/i5IyC", + "CVn8ZD1R7M+pCKXHxt9bSFWvSy7YQDuTQDfrstajiXSo4tvguK1P7tM8XQYvJfgKmgXkI/6SJdBEwFEb", + "d+F2XGHNzjYGcMGmeWlio7ixNM0AmzWA37ObWw7t2U1BRcr6iE/zHqmAJQXoi9Z8qzPU0668UfMvKJ0S", + "lXd97s06mzmtwx99OqV94/R5X5SK3dyCUk3FNqU+S7laYzXPUq5MWrEANWIMHWBUAeHsKVXJnBRlnjAp", + "bao6KlLIG08WVHAwe4CQ7pUQ+r9tE2e9f5dsaYyVNSt5t13MqWRy+0/4789s+f6dvqkCv28Dk97+U/8H", + "yt3qGUIv0it7S2Jc4ptDbGR3Z6crlz3Ixf3Gy5DfZMFEzvMqS9GoFyQalk6wnZbRmcoxFr1DW3gAJGS0", + "p5c2pT2hiqR8CoZ4mNpeTgIHpLH16w5Icw3DuRIdGFe5nkzBSr3pYKMcfJpJuf7ngguq0CFgQYvCrnya", + "nnOItRZecz2elgABodlAqXIOBLRB1SMorxdokV+xjTo+hiqmb1N/o+6xATsCqUqmkvlmTZxgJdtGJWzG", + "zHMG/GFYK69dNeAqtT+e9QTMC/3jMM7Xtz/rWN+K5d20qtvX2/V5u7qNrdi0cnsH1h5Ke+l2zqP90rzh", + "o5rlQbyjwnLQKk+pzQWh6D8V/aei/1T0n4r+U9GOMdoxfjb+UyDQhtkDfuvjDBsLuYA4ay1MV6qNvlzR", + "lyv6cm3gy+WO7zoxLBwTHozIElXRDCwywYvLbJ5feUyu0XSCYVCeGVOy/m1JCrrEUHGT+Ew+ZBy3ES/s", + "iJz5xJl4o4+FvpTGzU8YVikXOABSVGUyNxkTQmi/71r7wtF+BJoPCTRTLiHb1Qa3zIGrEr5cXJOEFkXG", + "McK+6jMp8lobj6aMqqpkvWmQzPevICIn+ZpPiXFq/ea+nO++WCTORZJVRr+3OZoA+y3bQnfbkcgumMTL", + "hiYJkxA/a0a5YCm54rRzWRk9bNjpEpw668U1J8E+rmOo00ZLzpyNJFRomdzVxpQlc6p5bWlR6JMzcSZ2", + "J+RwSih5jlQF7FjKPOFgyODUaO2uoD0uvR7IxRJKmoZ0y7vkUNmhUKHFdtf3GE0rbfSpllumHczX5g8J", + "rSTmlTspcyltFfmN7umR3xP5mS39ntCDiKKJCvwu7WkEd09FvsbLluQl4QL//sYfE61ndSYedVdM5Gqj", + "VXODc6sGdhC69TeMSLokZ6O+MiNSshkt00xTVz4FVR0lgNMJV5Jl02YP0GeSZ1n+e4W+1Qt6ySSRTEim", + "1wG7K+gSE6Hq/vVFDA06JE/B64qL2dloQg4FKTTb1SXARLV+cEtZya9YSqZlvoBz8JXUTQlVv1qZnNck", + "44JtabHswdhWFLzvT/DW5LC5Xe1rSWfsKZUsBeLtk3uB1taDRnPz6WMqWXkFFC/JtGTNi+bP9/27YIYx", + "Hik/jcKwSdWZF3rMyOrUCwG5hGgGYOdUiRQ07SlOrFvTm6r+p02b1C0IOgMuIYvPpJNMAUcbhVfrb9+R", + "UJGuhwikhx52aK6g/VKLpRCl/JmA2S2YUGO7j+bO6EqerC48nCC9HnpI0mu2nyY90Dm8bzOTnn4t+TaS", + "sHBpxwNouJKsa0Vhx7FuR47ojAu90/2JHlwRl+Oh63EWdqEA4AXWjDayvQ0jS9GWamNlYlB/SGc94rT+", + "QrhI2U3bZrZrFKvLnvA/WF86cBSWRLW4QAiJ8ypY6SZTt+/Z7vhmt7mi2b4WT3pca/X3dg+Nhr8LNdzO", + "wFb3YpbGm5td8bVUMQ/nZvRJHnRQY0IFzfJZXgEUBCaKyqnNlUKgtzB4x+YGgLYASxvTzg+oGqqE4pk3", + "lqMHHUvUqkStykfQqhhZAmPh9ihSvhStRU9EJsgXli3JhwvKFAWshxOw/pIIHUG5d8EOuuD7bMu717x1", + "2+mx1l7JN4HfdFlmYV8nPj1+555JwoBWyyZaSnHmWmZGgl2bWZ2JA/sNVEi4mTXJ4ZqCs4DIFblgRocm", + "Vb0sQ0y23OhX5Hy9NdNzI3kQjhdmJGAqCAmf1hEJvByCW1lIjlSsvKKZ577RcNSAuqi6LKmQ3JqG1z12", + "NCa4Y6YiXyxYyqli2XJ1F+19/PeGj3GQrwO7GJBH3C2I5QewxoM4wYb2urgcEeBHgB8BfgT4n9CzpGIL", + "G+9BrkiEs7neyb4vtnVPQQWmBH9e+65mSQgVRrkgjCZzcsmWY4LPqGCVnmXgDyfHxHpapNaJyrOy6Wam", + "Xad4a1ykBM21yiqxD27TTO+LQEXiBdN7BNruvFzYG/Eoo4LsHR0alznri4127HV9miR5CXMx9aZ5luXX", + "6IGXMfnkTGzV7mFWD4g6JP3TOxjvO9D9Ui5MXkyFtkr8CucDDdj1sw0WDjfJdU0BxOptaFrBsgxraspL", + "2Xlv7TR9Gx1nH61F8TWKr38R8dWemjZLXwdmT5yN6wqJFs0vYXlEtahDw0DwaPdnQkXCMsiU7Tiy13+9", + "YwEn2wF+zyZUhnm9rLfTOs4aSwDPeXZyJg4NMy/zK27eyTxrYWM/YZxDanMH2TDqpIKwssxL56tuo3YO", + "dx7vzviZXsj34/a0fzt+vv/48eMf335t096rPM/khDM1neTlbHuuFtl2OU10oW+M25MeuaNEgutMuCCv", + "T/fvFZG/De4dzGTw/llB0UmExiiT/V4xqeorvOEE7YmPTtBkN8pG7lgm2aBmjG2urlrbjerKPmW7vky8", + "gXNT8hxKBun5lN48ZXN6xYO+fPSGXJivkzNhchvq3uzbOVjCFCzh06WmanQtpzdg42Tfd81roDFXKAm7", + "MR9AOHSfGhPRdSUeTSgOf/eMvzZIaG0jg9dbc35KM06eeOYAgXerC281Bhs4uCUM4PP2Gh5O8eDiaPQS", + "+q74ZT7lGfOXN2WKlQsumLN58JrrNGYWu9Xe2Ock5VfSWUbYpvpsIdxqOEezQ7BD2igwwX6z4iqDECxq", + "jJ0AXrq9avq/9Rarc1FuYK4I5VeNy2SpDI+m8zEckuaUs9Ja9ASue/2xPglNokT3ksEEWXf0ovZabBpd", + "osOqibKjOKSdh+hlmhKu8qxasK0LCp6JJZmVNK30/Q2w/lCQd1jinSli6iOV2cfzOtI4V3MuCLVxJhxB", + "YyyjgpUazSozd9uD6/Nd3bwugebqtVmjbIY1n5X5tfQ3B1dA/5uVsk9TxUonOyl/I87EniIZ0ygoF5aF", + "uRVvqHu5EfV0/cHGDrBHersAV3Nhw4H4ga/0sAPBQUwylMBsvDwmdhZn4hUE8X4CItwY1huta2C2PuvF", + "XwK8tm15oL8axye7um9XU/0LQ8UBgwvPUVa1ToIdGJLcaDxylBG+EOr+3nA1388XC64WzOhb+g8dmp/K", + "gkHoclcpcBaRvvcW1rZj2KF8WS1YyZPe2Em1tU/GF1y5q1Wk+u5f5BIBAIVuGwRuzht+MYT0sCPE9WmP", + "Ec9JzyBxSP4gI0uLLO3zZGmvfzk8eFU+u1GsFDQzHidULA0df+aBhbtvQm6e6HWW5blkpa8MM0nM1+hE", + "WgLZ+H4XCiULHKrVjplx3WzN8q3ORfFa0ErN85L/oRlLfpGxhW8VOYwvvRbspoCQxe0mekIjo5AHPiX4", + "GMyE83W6YAmtJCNckYwmlxAKkadED1NPM0HBPykZzJpm0umtFC1nTDUUZl2q7R3qBjnk94ipTA5M7Bjs", + "gHx9/Hyf/NcPO//1jeYwtVKvvjs9+Su34gi0BKd7QZcQrAt9skJGB7q7kEa0lZuf3RQZFbhUzR65JHli", + "/G49dgKDaB4zf6cgriIE1gQnmX+cvHpp5jxZlawuNNLXx4e1hwmGKnf6W+T5bsADB1qV4okZ6BPQDG/X", + "qfG3dvT/dn39SFXyntf1oB5NL8NPp6dH1ucbwpnMmGAl9RROeclnXIBrgdNCD17qb3d2vPFxoXa/R0aC", + "MW6/+/FHL+Lttz2WtnivdNebEjnPSzVuk4isFgtaLlvjAjpsLu9TmpJjXN5g7hx3YdmIMPQir9STi4yK", + "y25kGE3m7mWBAjWEaKB/OM3WV+9q+GrDpRrb0+SRa+eea7JNiGstJ6hxNSzAL7LFF0VeAtgsqGb4oxlX", + "8+pikuSL7bxgYqEREs/rv7eLy9k2NgujfS246pGNX9dQqmuFcK8gF1uzhOFBuE3xiYc+dCuDsYeZThB1", + "2AVaK9bU6zVYqPmAyxjlp3uRnz4yNf6qoQncss/KMqQ7rgvgC4Q06kd8B9Hsh6Uh2wsuZRU650qV/KJS", + "bAOziT0hcmUCi658eawbD8YwSfr1FjSZc6HBgrlaAhOC2TcZOReA7M6N2845voitTf875SxL+3xf1Nw9", + "xetirZsjTXMht4sy39Z3N6S421b5JRPbnt/8gCEsmJS9DjhwzW66FhoFT/NKpM776WJJBi1I2wcKVsfs", + "Vj3SAcQbwMNtKPGUpgYIPDPPaWpOKAL0uiEJEoiQwYTXnwuCdVOQKw81nNPATdJeksEGOG2O0rGJeN9L", + "EZ6FTITfEX5/CfC7waUO9VlbdRqhAElogWEfqFh6rMkcVVIyTA1vrgkTUADfJLEEokV2xUquluRslJRc", + "8YRmZyO0HyhKSJTUiEcAj7gXDJ7tdSuBbBnh+/OFuTu5MBsAxAFEbtUa0OCY8CmhV5SD/c9kyC3luEsg", + "kr7TdJZMSyw2eoODHesbj5a9H92ydwUSgk82D5zZV9RqW+pvEhThAq9EgFAmFu8QOgiZ0dYhVpM5LWdg", + "7mCNcz+C+exg9NbBIKuA+YBuHsZAEAIF3KgmewgidsvDho+gxUtPbAM9QRAtj1y9Nl+ihV+fVR9Y/rl1", + "93nwUCzeXPh1t50taEj1wkI4b2do5xJ8kMvOita2gdF4dE1LoRcv9ED9a85TtIVhe8mqpC+mkC6PBb2p", + "zvNrfY/PqUgzNAy6ysFIELJ1u1gCXY+dfIPgq95If+GiOdoexU/ivKvoJbPeCP6Y3o9HBSsTJpRhRINT", + "Stk63Z5/yq/Jokrm7r0TQivUvZpEILhC/02+ZpPZhOzu7Pwfk1GLZpnh12jmjgW/6ZC+N/CxXcwgSYd3", + "OByf81PeZbRNjzs9fKcPRVGpUJYuFMVVDl0SKixLuc/tu/UBDVDV+/Eov2JlydNQ4OgjVtaliSvobmbs", + "JmjuaDwtsMQ7Z5fsxXvUm9Qk8GH6g/ZCaGp+ZYY2CgW3aufBZVT2uQHjN5ifXiwnNRgZau2taXbVdTKI", + "mBoT6N6HzXNrC/ayD1qrN+qt483gcoBCzAQnD0Wat+cqQJb6X325DuqJHR7oVixlfuzc92bMQ3lJ57Zd", + "t/lrbo7bbP2qrFj6GySMHnSjHGDpPXsECiZSaGhQ7SMs3eRtnZxQsJqDs0KtHOC6bElDxrfh/oaRwV96", + "j61b3Ke8z46RDdvr0+CLXW/RtTiQ+1d2a6t9ucTuZL0ra8SS7lqtG3Wj9J0H3rx1+h86194W3TUY9vI5", + "YEtDx37dKjXq3PMqCXaj7F2rVgRkoMoLgVA3X4eiNT2khM4ob0A464g2btWtXcu2XGWRX99zQIV7IYP+", + "A3B/ZDCImUdS+PxJ4Q0XaX4djiK5N5uVbIaap2soRyT/o8GWXxy+fH36bDQe/fTq9fFoPDrY+/doPHrx", + "6uXpT91BjUc3W7ri1hUtBV3ojf5t9IKLCnz9fsqrUrdAl7qFXKj56K0bIEuf0oyKhP3EpcrLnojp16Ys", + "ucDCZI6lAw5yVamLit7m/l5SoYgt5jc0SI6D6k+rUhzUnZywGYZr7UptduC3mx2Y5iv080fXWEnK/Bol", + "WawlNWzCoKwlamUrSWdo1V+3jfoE57do/DV5aZKeUJES58hYf2Qide2ArtfQirGGlQuaZRBwiCIle6QE", + "TVo3S9sqZHxnIh0uNTdpAymm5+m9PhLtNR93iKJ7XkArn1QlV8sT3TcS01FeKpqd5pdM7FVqHnqvE7Ja", + "sJIUUJKA0crEuGkDJHzKaOlHTJorVYzevwdjgGkeCvzCxAum0BKLkiTLq5QIClEnYGcJ2iqKmQ2XbWJh", + "1BX3jg4xA7Iky7zS7IaLGZOKgMZYjsnvFSuX2A62OYbtWlCh27cqftiljCfMGJ1gvILRXkGTOSOPJjuj", + "8agqMzOnJ9vb19fXEwpfwZ/aVJXbvxzuP3t58mzr0WRnMleLzHuWHzVGPRqPjNn+6Mlod7Iz2QEwXTBB", + "Cz56MnoMP4EQPIf92aYF377a3UYDIv3LjAXulF+4VKC3oWm6ZbJWuTzMWlgfZVyqPWxEN19SWBwZcJgw", + "YVXsC6NtUl97NiIxXEUQJP0JefffxtH4AMv/TZUVewcXTpHBw/OUZpJpahg9GcHG2BAFT0bNqpaqaMOq", + "wFQ31HWR5xmjJsXWElZYX1oBv4nnPNOrfrEksHgTntZ2ZqOe4TSH0BPu5bPzKOnw7A1X7pIt1y4dWoyt", + "Xbs9yP4CB9/4iJiQA2gKUntdG6uQJWT+eOCAKvexPCI1/7JuOZ7BZO+K/Wp4gb9wa4MoBSyAgo5cHlKy", + "E0oZK17ZXzt8ub6D3Zl3KUFm/Iq5WB716dd357v/xp//hsE83j2xjbjgPSb+ULa0wYVM843aaUmnKlAZ", + "fg/WoGUy51csDVSyn2y9ni1wqeECdLvSsFXvtM3Sd2f6cYlm150xL2fdhgNuJtEdMOJQY/WtsW2C1PNc", + "TCDo+eZVALYPqAZL/apMWfl0Cf/hYjbJ9R93q/0UTQvsjQYr+GhnB82lIB8CHMaiyIzf1/b/mseJeunX", + "kkg33D/gotVuabJKEsZShtm+v105JmMs9383G1ttTNtxmgsPzxg3JlRo4dNGszGCKOSL8gKokLTCBD35", + "gkHuHcfb4VUPjiU+E2rwx5lQJkQOvBaOyYJmmgwhAQI2KJdC0ZsxMWbb7ndj1kCmJV2AM29ekpQlrAAm", + "Y0uVeaW4mH1jlnP33pdzlSPjgP1+SDdEmPHje5/x87y84GnKxGb0U4mUlVLledqgl4tKD3laSQbvx24x", + "CVc4g91H9z6Do5IlucCb9jn4QgyYCjg8l2SRl2DJirWluRu5aExqzmjKSrSGk4Rd0ayyxp8AaI3BEQYc", + "MnoSXCaY83cPcOwhUK+g2Ql0E7S8X71/TIAhHTizU0Eq59BarwaedWO6w1JNw2CzM62yqQmJ462Smer9", + "E+gJCo6vhTMz3GymXHqgpYJUwy21YIvZUaLYoshLsKu+YmWWUwhzUIeXXFAIZU293G7ARTN+yTLQNtAs", + "Y1eYig3jHGsOqsUwupyg8ajLfnzP/KvXh7q7SHuNfUfG7cRC1DKgebmTSh0CU3QGarOjMk+rRJF9qmiW", + "z0BVVuQyZCyMcdApBPvGhrqSLRrEwX07QjUJk+ppni7v9y63T4tNXYyxMmzBiN377Xoj1ICiCKyYM2XU", + "BeCKMcaDxGRUlFWmIsqIKCOijIgyIsqIKOOzRBkWJFit1Uqk8X7cUqlv/wn/PUzfI/zIWDBHSz5VRiFu", + "eiEXS8JTEwcp0beM+Z1Lpznnyl5mFwzYknPZaSIY/GARTEs5D4ogiOng9EBmxKM2EPHVQh/W2q6rSfk2", + "+BBo8w7bnJNwgzOR1n6ThuLHwK/1EUAWJ+2TXCXZtMomJKKWiFoiahl9iwftXmfwMlfP80oM3a+mA3TK", + "U9i1KQcxxKYeKJmJLIUb1LMpBAPh6vrX9h7PwYEvy6VxGc8FI+yGSyUjbIuwLcK2zxW2Hfhoao12KGjz", + "8HemGlhMr+glW06MMY8+PaSoLjIu5yx10RIBYmAIfsKnBBKqNKJvN6HZjKn7xWV3fsD+f3cAan2hGIO/", + "9tmFmKVt5WKx6FdIxTR1469u1YV9+pWKqrD9yC/Q7m3MR7DmnaxHHvwpML78RXQb0W1EtxHdRnQb0e0X", + "j25rcLru4TPkrm7igTQ0jR1oisE/Pnut4QM91x6zIqMJw5Uc9mobEV9EfBHxRcQXEV9EfBHxRcS3GeJr", + "YLbbvkFvG8cFiOMfNInbwwL1e7NRsXXxoWnqy3pWjhgtYrSI0SJGixgtYrSI0SJG2wyjOfDUgE63Bmvm", + "dbkfrB1hgQFgzTQVwVoEaxGsRbAWwVoEaxGsRbD2VwZrDjxtplErinVhkoqiLz6SrtsBXx8oFMaDwqei", + "iKEoIpqKaCo6iUYwEcHEXzYUBd7vFkfAdd8BD9uYKNjEz+Vitv2nCaV7mL7fhmhk23IpknmZC81mfe1P", + "6wGuKPahrUPb1IGufeJXHqLqcd1/+aZb69bLZqMcZM8VXVAjJoqYKGKiiIkiJoqYqIuJTqqLBVcmwGoN", + "aZB/YXCoFlx6QvCCJu6G3hQ/cSkr/dttEdQh1o8YajCGes4FzSJ2itgpYqeInSJ2itgpYqf7w04Gznwo", + "9FTQ5YIJtW3i1m+Am9A6/Qjrn9iw9xE39eOmwIpFBBURVERQEUFFBBURVERQ9+MvZyANcal4NgVMf/LV", + "oVtfCy6kgtxowEUDgRRsib2iGAaKYujViDwi8oiW1dGyOkKvCL0i9PrcoFcNiQDxtAyiVsRbhUifIQw1", + "Y+oLQU/3anUdjawjsIrAKgKrCKwisIrA6q8R9TMMqVbG+exTTGGEz88WVz1AaM+i+LiBPSOki5AuQroI", + "6SKki5AuQrq/UFjPEKoLPUVuawhUMP371iUD5OOgX1GyRC+NBWdBMKg35gTaIHtHh5DRqAcYYqm9o8Of", + "2TIiRHtqvEU5FHrpo7VWxIERB0ZrrQiDIgyKMOhuMKgJTNrWWvh1DTC6ZhfzPL/sD5r5E+4MFiemODLG", + "cOgmWhTY8xvTdMRCPhYyq/JMH+MPrS9rjCBGnorIKSKnqEGLGrQIHSN0/NKhI0uqkqulxl8a33iukw1g", + "NwRDXiDNGN9IAHWrAnzaYrAFJU+ZJJW0NCcLlvCpvmGmPNMAEXJR43WE48cNMamloU6nQX0ZVUwSKpCJ", + "L1g503eWoe2izKc8s6Wgg0PMh21a3cuyfTsXTWWSgWoJQCiUy2AeuVCUC6lJwo1BTsjpnEuyyFNGuDwT", + "qGECRjtjStl5Wn7MplOGmbft6K7z8nKa5de6V13cQOssI5XU4ynZjJZpxqQ8ExyGvSRzeuUvQ+kWNi81", + "Ew+HU32KHR7hatgJv7J1N4602mxPb3WnzSNdWk4uGiWHhGQd3rbbiDdczfNKHXEh4Mzcf1cBanmYuRym", + "D9PuSy1rPUjLP7PlwzR8VHLNp54tKM/utwd2U1Bxi4Vut/eqTFn5dAn/4WI2yfUfD9Ts0+Ut4hl/kiGQ", + "V09en+UDpijPZAyUHMXVKK5GRX+U1qK09lcNlNyVoDwxzdyka0S07T9rcLnSP/sAfgcNUlvKuljWP/LU", + "CGpc4h6UbJFf9clnVjBzX6DKBSOyuvhflqC0NdcbBdtzJlqi21eylo7ojPJAxi6cz2pYMeglwgPh0as8", + "AqcInKKeP+r5I3KMyDEix88KOfYDuSB4XOFlPhgLfhilfbclw9KmmqmOfSBJujjS9lrqwaqqFCw1KvwL", + "NqdXPC/PBM2y/Fo2dPjUjs+Oq1bLk7xvXMBGmdCXYcBB/0vFqmMz1N8rVi7rsRp9qz8urthC3k1T+Mxq", + "ce0waFnSpf63VEuYssZzn4guM6ouIwKPCDwi8IjAIwKPCPyvEX5gMPwORiQ4DeLKhAqjqoMDVXBBqDmG", + "rjBsSgv+nomUT6cM2BWQpQ+Vc8FqlW6rB31OoTCar2jEW7fU6kQD6almEQt6aeh9cSZaPYGlClix1O2E", + "DWEMdsW/9eErSi6ZZ38T8MaTrFRftCb4/m3TVy/Xfsk+QnSHiKsjro64OuLqiKsjro64OuJqi6sRjRBK", + "BLvWi1GZmBADofZgM4ltk21HbhdMpFzMtjIumOx3lWwMzNQhug7hii3I18lcM61vfJidZZooLM5OVjdg", + "eV+teZ8SC8ew0pmYUTUHi1FiRu9sLbBx1NXvQQ89JQifPjkTW7orZ09gi3JB6h6kooqZkoawk6VVh9fD", + "TnMmxVeKLKhK5p2yVCxt6zLQfAfe4yCPcHEwEwH7hYsI6bt8GdbGrJReIqTPDcJw7D74YG5l1QtvRnhI", + "3P2vCwDes0RMJaEm8VeE/BHyR8gfEW9EvBHxfs6It4MI5X0BXMkXVUbRHjiMbU9MCU2vFgyCo6JDoy1Y", + "C3si19YiF1TWB7c7Q2daUjeKdhvIp3NFM0IX+jRZ4Gn7sYYldVt4pizaNdYpqWU4pl5XoWwnYTBMBJph", + "bGcoRK/acIS5c9+jiLrgCAwjMIzAMALDCAz/AnnP1+KroQjRQsHVsTycoq6B2vqDeKDRJ8kLZKhNqwJr", + "HkxTpGyaES70xYTs9+sLJiGohQ/qzKEHbKexn/zmTDi+YNaIPPfsBi6W0L45FTiev4Ee147Kbx4/9CFE", + "14Oe3t/bilZTj2bXdCmJnOfXjcgfFVykCc0S2DG3eNNsGY7XcWh3ZNPAHE4pKpWJdYDZXNmgcBXd2uxG", + "MZGy9OROrXApK5bu6WN3lwaegnHJ7VooWMlzPY1S3WEcXit3GYzRU95hIKaFuwxieBCMQPebBEEJbCce", + "LnRTSD9kXIvBo711aI9V9Z8uH9Ya3WraY9yMKBhFwSgKRlEwioLRXzRuBq8R9EYykP1joKWHE7ysSXWv", + "FpuDXFBlmtGSXGRL0GqDxQUwUlj1klGZC3LNiGBWUDIabc/CpVJaOLI6b6GlpsyZYifLJEMp5c3cPomD", + "F6OTEsc9A3Wyz4KWl/iKbmqkTqHeZzZyzdW8Vytvu6qX42XIxkV2WrUXDMJucsHUtb6xRH799TduSILd", + "qObsv5Lkgs240D+AeRCIxWJJAKIBe2CL5uOCFk/N28KiyhTX4mNtmTLtWzFagllMbchurFs4Cxin844d", + "hNxLgKg+lBGI6e/BrEAGOXU6ZX3bbzNagURMGzFtxLQR00ZMGzFtE9MedmHgGuOJjYHvn+avgUHiHJzU", + "OOqVxrMOLwHhGmgEzn8lnSrydV4SRsuMs/Ibglpp+yqAfaF58mGnFQ3DyZQLmvE/qHtMAAh9wchVzkFp", + "FQ4Kt4ndhpt/DP4WkVJEStFFLrrIRagYoWKEip9n8DcH0DaO+Vbbk1wsyeHBw5s8zJj63IHa8MhnjqB+", + "G6FP4dvxRoqzoWHPxnoJiixP2egJML9xcITNt3jQEoaHa9ownV7kecao+LDR1qKdbwS0EdBGQBsBbQS0", + "EdD+pWKprUOzwRBqJlX2Kl0lF0Y9WWsnW8pJDDGRhoKNpfQL0TA+2OPzMSsymjDciOgWFuFihIsRLka4", + "GOFihIsRLj4MXOyAvru8hG/T9EovXr856B4W8K0jv5IYv8qmNgMLRQSVTatDGx3rTK9naXOoWaw6GmtC", + "hnduM4qmP1y3dWupqEoqJJ6Ma2tySiuVL6jiiRsCTXzPPGONigyiM5dKmnirX5lqEpmMzYwNVc5GZpxn", + "I1OqC5pNCQPNnP3jl/I6H8FrBK8RvEbwGsFrBK8RvEbwuil43QxN3g3ZIuRcgWwNJvXsAahIddelIuyG", + "JXBLovkpXS78PA7tMLdCKgqEIZlIgyjWmbVW0jaa5GLKZ1UZyAxHi6IbSRcvPc1Urmu/KRv+AKLavgNV", + "77snQVcmacwm/dGMbcmsMm0xfdnmCyYJxiSAZhdUVDQ7xxWl2bkANHabftyY2/10gTTuTgTSEUhHIB2B", + "dATSEUhHIB2BdATSJjoaa3mstxDXnaBzyVS57AfOx/qz0dlaqnMIGlaXkikcfKLh06JQD6mThcGu0MjC", + "9wgjI4yMMDLCyAgjI4yMMDLCyAgjEUbeAsrdCVlKQQs5z9XW7xUViiu+KufYiSlM6sLAs9D3CuMDhOJQ", + "eTkabAt6Xq1WdKFwS+2sCR1NLNgsOHUsal0n15TrW/x8mpfnSZ5lDLDmOwNlNUGxkhnFr/1qIj+dCQOI", + "5SUvCpY6JTGXvbDWTu2fblYR40aMGzFuxLgR40aMGzFuxLgR4xpV6UYw8k7wVtEbJrdL5uICrFKiukKe", + "BcJXkih6Y+KLSvJ1bS1Ai4JIpuwBt3rer2TbeOAbCECaK/aEYFJeSRZ8Nldwsy3HJGU2mJY577rDosyv", + "eKpPfVd96sZp4NMpvYkYM2LMiDEjxowYM2LMiDEjxox61AFo7k7I8irnaT+Y/DXn6fqQpXN6xcwFlJWM", + "psb00r7Gm0ijurJurxlUH3dwQctLTehUmtJo2FlJxAwmW9qSQLSsBhFhcV9d20GausgXpMO8/5gDv7YX", + "KCajjQA3AtwIcCPAjQA3AtwIcB8Q4LYQ5lAsa3SSa1Lv0ixrazElWVCVzC2RfYA0vF016ubJd2lRNHLv", + "wr9hMBf/P3vvotw2jix+vwpKdU5tco4sy84ks3HV1H6KcxlvLs7ESWYm45wdiIQkrCmAS4B2OPny7v9C", + "N0CREnVz5HtXpcqRRNxB4NeN7kbRVMixWnofb+P9ub7P34benQHlNSKj9rJo5Ejmu6Kirh4edqVQsPX2", + "rRER9tpcs1pvwblvW10hm4u+dLVeBbp7leQAkgPonirCYMLgu3r36jSqzgvZuvx61RkcPFZPpjmYZ2JK", + "HjdMDyo3ZVVMACpw22H75YWqpyLLHOeWdqZhXYZhng4+YLXP2i1YVWjtixE/lTpD89nA5FFZkVlWxasq", + "6wRxQbeB1gvBXr6IO0BXrwPd+EkkRSRFJEUkRSRFJDVNUos4aF3t4vZXudqlnjOs0y+YxCNvOC83eTSa", + "1UTWb/EsL+6EkEvKOxf5/mdaifB1KpXyjKWK6QBQUQOcbaFjERzT+/tAQSFY3vTfdAPoDFytcGRON4AS", + "ORE50Vk0nUUTOhI6Ejre0BtAV8LGRReBLsDBO3m0PBT2puPktTiIvrzjWDp9JfIl8iXyJfIl8iXyvRtX", + "ha6IvQtvDF1CvgCXPtgm7tGTi0JZLDMR2aRoMzlws5anKYtGXA1BQxcLI2E6MyXOjlXI34zCRU3+MHPe", + "faO3Qp950cfbtWtHf5V29Ku/mOCynYGIRolGiUaJRolGiUaJRu/oTaTrHt+Hs+8lXkHlY80+MPtlLjOM", + "eG28QEIdz+3/sTCDJ8UqWYAmNOTjOrbjFcKoRo/Pl8eJOGfhwOznSplm0k28Z2Muk/PlYPL+v0Vkz1l8", + "wtXL87ba658vVDMcCiQXHcJywnIyLCUqJSq9qy46UQUOA4tOgHFF75xlfi37k7uWLkLlF7K/Gl+WsnHk", + "xUKwQbBBsEGwQbBBsNHsxdJw62KVNpp0X9tfw38P4sPspShWc2Ap/Ub6BTt42pnjFFIhk+XHp1P1WHiW", + "urCTXx08PcyefcFXEFQl5N1BREFEQaeKdKpISEVIRUi1hnfHEqRa6NZRhyTXoyeiaHR3uDagtOah0gth", + "L+cwic6OCL4Ivgi+CL4Ivgi+7oSDwVLyWuxZsExDhWb+10tDdXGHdzVL/cu2zieII4gjiCOII4gjiCOI", + "u2t2+Rs5lNzmkdtp51rqO2B04+I6nycJw8frAYoXat56mP/1O6jcPIb5phKMEYwRjBGMEYwRjBGM3SWN", + "mqejCpA9U1baRIwF3g98Hj5L01X9KCFSR8wtX+xQ2UvTp9zyG3AkenmOnA3989b9ajoQ/+Ny8DGUS+59", + "BJQElASUBJQElASUd9q/sUS6JiVfz6HhggNbI7KGnJpObN2T1w0Pv+PgdqXQv1PtRU+PwwyVqwdWjGfj", + "AG/+dPc8NW2uF/Eh8SHxIfEh8SHxIfHhrT79bea6BYS4hqpx+ytP04OVbltbgSzr3qrXSPHYUCK0my5O", + "IzQkNCQ0JDQkNCQ0JDS80a61G0RDUT3HXngazZOEVZ+GdaliKwg3oUUjEZ24uVl50h+etx2OwIhvu3dY", + "MKHiVEtlmVTGCh4vPtyeOnC/ctAUX9JEx6K1B4tQu/Hysql4vdUSyynok3tI7GudCK42fzPZSvrISh+T", + "LpKAk4CTosMRbxFv3fWjWlFHj+UmgO3Wly3p52x5nNgct/YwFeq14xhYUe0oE4K5fRc8MaoF7zHAHRG3", + "mYeENgRtNU5KjDrMzQGX0G1sqchswWL3/Fgqf5ct/FjPFFPB4pYUboYPBLd5hqFfcadzvc6tdNPoTNoR", + "XmxbYTvI1aQikgNZvakW55jfGHmoey2pEiI2jJeFcmN0hLMIivKp7sPlZlvsCba6zqCxGEglfCdMcvLA", + "6Upnx61998obwY6ODqf2ouNWx2V9hMlrOSfCskLnLOXGMJ5oNXS7vlYDOcwRUd27kAg2zLhy2/R0qR8M", + "rhnSlPWCZv3GfmdGWJfEHLfYPVfApOewhPtQrdeznWbYiJ8KNuaqgCZF3AjTxpXKZ8rylOWOLrb63GXs", + "HXusZnKcYi7uKTewifgCu7F0pGIcIXYYe4bK0D2YG+U7EPk+3Ol2u13WO2BWnwhlWJxnYWmEQh0qSR27", + "iTY1VWAYe37PqeWrVVJgu7RygwcQdE9ptYVq5vh+bd6kbnfCHn0pig47GMBA2axwjYyqgaCryVBcmSTE", + "BZ8nmeBxATOeq1B4JV27NqFh4RtwmYQp+kP3Ma4l0LxDFQlWn6OwIvsAyq6aHkXHOpaDgknbxuZjSwEc", + "FsesrjL6LXXBrzQRjTcOVJpbc9mBtGvSEMXSJmmJpKULVs8/3ngL9rUaJDKya45XBHee+utTcaeEC1QD", + "Mkc+2wkTBd29IxERdr/GcSKZkGRCkglvbMRw3igXnlcsPIeWfvvrhGGXW3OAYFIH0kyc6hNhKoKBmwIV", + "6cvn32E9BylOjEnEImKfD+dtXBiOW2M5dESrhset8LMBHIZMrA78CxEJkimRhxt2JpKkc6x6Za2D6Jsb", + "PHMwUK++YCNprM5kxBP2n1xk0olH8ZyeSHWaJ9x6AdkLGz3LrBwLY/k47bBfXf0xo9iLEO5X1hcDt3C6", + "BaI9IxRLw4x1r0OklZExLjEgWbSrMgC0PRM2017swMu4cXf0wiS+W9I44U1nlqMg02Z87CRSbUcCbEHU", + "0LQZz92ypYbLzHWukwjRbLIzmUELCxvzL6+EGtpRa+/RD+3WWKrwcadurcO3/upuPf78v/f+sfev8sP9", + "/yHrHMJ/wn+yziHrHJIMSDIgyWBD1jkbkAsWRMmvgma/KM8WTkRxESY4lYBfhI1rYWP3yhXRpFgmsiSy", + "JLIksiSyJLK88THIroG6eRuMXVYwFMfnmDQmD3pTNWt5VCVUr75Fg56YCQmqzX7BpMsHpkLF6GNVU/EX", + "WF/C1SlcvXwD9hVL1FkssidFa9XehgE+9Imu3GoeakOm88TsxOxkOk/ISshKpvMTwhsGFtuoAT0SXjAE", + "56wvRvxU6ozpwcQ0G02T8fi+wRQdaLQABIUzebD4cv0L+xFOCjDsjVmmk8SNNcvyRJi2m/rqBJYwHF5/", + "vD+pz5mMBcu4GoJVmLde8NRmghWxt7GA+rotj42160VuvJVErNXfbGkrgSbWMuJJUgR7ZyXOfAd32O++", + "DmClAQgeeBx6AG0NGrrBBBNt97BvgWHcr3V87NYB1wjsTXjpPbVHWpl8LOJyU5pBfcxTGtc4MRiIyO1/", + "9sxtgQ7w8StXL7yMTMX49ZdUemN7932HHYGnAfgq9LUFw4gxVzG3Oiug8Eo/uMb42QE9x1maSZ1JW5Sm", + "8tCGup+EzBgwKDZUdNgrfSYypvJxX2Q+p5EcOuEkZNfGYeyyvghrHTxhbPlItTLlNOPVyRWqBAtGjJsG", + "z60ec28WM+Yq5wnLhBtR92SY4Ab1/j6ISZtxFnOZFNXMpWHiPy611ZUMoPWGj8PoiFORFSzmBbsnh0qD", + "YX8534PLArpjvJv+Okz4M5fniKepUKVpUSbcOghjxhO3FuItI1got2gILWyHPcGf/9VzK+G/3rkv2U/s", + "9cGbe6/5l1BkD+Zhm73u/XYvJHgC1jiYos1eS1V/+P79evcHw04wt3E7cSSCYXbNHD92c9fNWWiKUCb3", + "Jj9lQ6Qpp480VkYsE0OexYm/SgX2ewnz3tsQrWHej8IEia5NJy0X6nQAHV/xPLhCxwMvUJL3AQmcJHCS", + "9wF5H5BYTWL1HfY+mC9YX9mREBrcF3PPhN4JmztRt2KYH+jZoQoKkzG3fL7wGOzvfVEgQZkU3HWjTBvD", + "xnliZZoIFCQYvDEoAD7JMxXrM/WzT5r52sAqaqXSuSmz1QNmxBCaCI4LmfBLydD7IWTuA8C720ALX46X", + "hL0w4Q+ubCnz9n0NJtKnb2bVXxrq+qt0D4p4uq5n/vumvvLu1kJl0r0euCWU0olyjIM7uetrlyCRxk5E", + "R6z7mWsqCq+utpZBfaVfgbD4VU3DfOVJbmk4cqu/GEeWZzAU4FCCKiKrYbIX1XdgD3QfW/CUVOzd8332", + "4MGDxwzHtsOe4lpWitsJNzZI1C+E+z7LVRR2zDAx84TjZERYqASBgDFzw910Pud2oFZz7NTd7u6Dre7O", + "VnfnfXdnD/51ut2dT612C6va2muVLZntoIYDw3p/PVPxhntL6bPOsToYAGspfeZ6QrHhpvvM6ivqMVxQ", + "jPzLJV7l9BVf9SNMcL538ddJFssrCEFL5Fj8pRX4w8SIchFPojzhNiAOVst01mrFezkWn7QSzafWrQ/v", + "95f36EVadYbV3uuwwrpJh8Uku5PsTgaeZOBJYj2J9XfVwDPIpFcm1bsRymQMYQUabyE7xAcavOrxkME0", + "heBy8xyk1kyfyhiinqW59d78emD9uZvxD4lT6eTz6ShetRxCm7aCI1TKZQZBwebmIU0Z9suf87l5CL70", + "Z9IIFmthHHO49RWd+0NvTOJ/gcAOh4MTHyrjXbqhknk6zHgM0Qf0mQr/D+VUXf1rsQ5gcfDk3dCDPiif", + "P8YBYf8vkWkow4H0rJQeqk5eXNfibJECmpFYQmIJiSV3QyyhM1USvkj4IuHregpfh4Hqr5WLHZzcgNjV", + "aO+MVpFjnp0gvJhwioSAVgvC3HCgiqa1SloJMhoeUQYjzw7r2elMfVaYrzQgbsRM55iTP0XkmYBM3Frh", + "5idGnsZlQ2azRqQddmDZGSzJtki9JXNfOGCKglxjK+GnDev7t9NXB8SmgXbbEtZsqkST98tOA1HtQ6i/", + "t6n1ZeJ5seunJnvo6VyrnRvCelUlQJ4k+gxYAI11ywIk2rmqAk47fFS5WLsGGV09x+UqGqHtum32jwzH", + "zHIA8dObDEqhyAZxD7qAZL5LkvngPZ3u/TXMSSnqHMloJKORjEZHRyS9kPRC0suM9IKCwLUSXSCo3FxD", + "0H0fp7m8xLKMPx1cDMMRzr1+wU5Ecb/DevVLJ/3VSGbEvW3miJued6kM1x7JQOsY4i50HwJRaSiKpzA+", + "kRRehAGDS7dLVrh/pvxVLSE/Qm8Qb8/aQTYayaGJ2yWYyV1SqD4cfjLnIiYnJicmJyYnJicmv7PmXKee", + "BZdz+aoU7ugmnQ/brib4SHlZ/PSF7cfqUCUTLyN4RA5qeveJ2j3TA5mA8jGR6sSHp6iUsBCKj+CxXpo+", + "xTvrr8GthRfEf9jS0O7QYoJAgkCCQIJAgkCCQILAOwWBUwxWQcCS+ZAZWp+/tZst7T+kRmSr0lyexmDY", + "sWmay6ES1xjoNn+C38hyT3iYIMsO8AkqCSoJKgkqCSoJKgkqCSq/Dyo9BJ6LK9fSKG7DNcPJfANkH4kK", + "c59UCJMxI4xBm9uacvHDu1fnp1GwNK6A7rH6gH6WEM02lpmIbD1rH7NlTh3RPhdjGAuZsZQXoKR1kKFj", + "0z5WaGXrfw715HGchaung+0CPCDVqZZRuHq6WBbiFWv1FupyhN11WxEa50qdX2sNf+tafemOkAsqRI6R", + "hOGE4YThhOGE4YThhOHNYVgXw+9GYLziwLb4vj0DF+7Vnp/WDS+8Le+oVtI1MFdtSjKp1PZbPpQKmtJJ", + "+VC01k+CwQkv1Ayg0qe+cBGvgxCkuSVkJGQkZCRkJGQkZLxFF+KZKdqaAcU6Isainw+3x8JmMjJLQ+zD", + "08w/ze5JxQ5ToV77z+grcx/6GkYP7zRjesCkGuI76CPaG6kiwcZSxUoOR5Z9eL/vA96JWpb7+CbcM/cn", + "kff9FWLcsrGsJG+yD33q6uvzai3FMSu+2O004XJqVKcdjAiuCK4IruiyXWILYos7YGoIEyFs+hWigM21", + "ThNVz+2FOiVQKdUiIYFGKUnwLcr7/xaRD9vrPYmNvyqzGg23vMoUEsd4R6YjgFPB0jxLtVuPtEqKzrF6", + "r9lA2Gg07XFtMAqVgXtfZRTKZmkiuIFoNpAitDBUbfur/99LURxmB0/rXutlLfH2j9SHhipjCsMrZvmJ", + "cN+JyG0D/rYiCNUUFDrlsDCIu4O+483Ktil/nykdW30AnsvECrh8tV9MHNbLfi6jWe2xP//hv/3J/93a", + "Oc673d1H01/v/jnvOhd8oOZ4La0YmwawKh2reZbxYoXbPZobEoao3hD/7U9lOGffkpnv5zbFP3mZTZmJ", + "TFBvU+Xn90UqfvIhxrBh0z/2tU4EV/NaN/V4cytX9EyHDNbvg2dfoiSPBZPKXyFde6XK3dm/EvfsSBtR", + "WZ7dIpBwt+rqjAmeJVJk91e80UVg0Qe+5OYrXXx63yrfn43tuiQN8/Jkr+RY2sPBwAjb0fBn3VSJ+/8q", + "iSrjf5jFIntSwB+phh2473oTeTwpLlat/mpqJX0HVhUk8pHIRyIfiXwk8pHId0fUydPi2bzIAnOlv+2v", + "lU8H8beFcQSqmNsvmIwblbmVgp8UB/FKlgS1Siy0I5hEg+ruvHj08NOPDx/2nv/ae/nzs53dN7939395", + "/PznVj0mVXfrx89/dLce97Z+/ufL12/ebr3/uPWJb43+fTJW6ZY93frr89fdh9/mxoS9+BBRRC5ELkQu", + "ZAlAlgCEboRud0NbP81Sq6Hb6XKV/fQZ/pl0260bifLCbFBP+pvxYBri7dnAaWEVmlzNZ1lcuSsbbhX/", + "cZeNdJ6ZOUru01XU2/u4yR88rbpx2YxHJ67sIbhYgc4fKrfqnc+IDgCRjeFLHzyaDl+67mXaeF37wsvF", + "oXtVlORGnop5t4GHcerZ59N3qW/smvRN1vK93nwd3dKC51YHT6E+vchxmnFT0TGM+3rFgZf1IT9/Tfz5", + "QWN1wm8r1qnpKOKqptvgGk8yewFT601p1OTXQXAStXmmVh09VKk3HjHsdLttt6rIcT4On6Tyn8q6uo1t", + "CBr1DUceXumg58C/ubAazx7zkMRJEidJnKQrJ4GLBK47oSufkouq8tapl7Tac0Jd4FZq4IJzYESdsT63", + "0aiCFwOdJPoszKv9ROe485rSZgnNAmYkJqxXKTOtFn4hcvljyWt2sseBb+15+W1By/73nNQxjzba36Ep", + "P6j0EPQLXZxGUERQRFBEUERQRFB0TijCXTXgSxMOVRTPwep4seq5tE1uVAs/D3msZPcMBrbukaMkH87R", + "G1V/vzBj37IiLzKdp08K/NasqpZUYLHay6KR21vJYnV9i1U/b85trboo/WVYqoZ5T1aqBJkEmQSZBJkE", + "mXdK8zaYgN8cE4d5irewdcKtrELCXa3eewq61nIrow7rlTfGSlP+LgcTfqx59XGLMTkxPO1zPckyVJQV", + "OndbHUu5MYzHOLF5wgbIfjjFYez6oly04XWOeBLlCXfbTVmp3G1R7fplslDk3wwbIlT6VSKEy0VyAdMN", + "dvThNbgc7h9+ePOe8eEwE0Nc/12nmDxNdWa9X1XFObDsOr9l94W/EyJG76s2eFwy7sF0XrDa56Vj4EXE", + "hfW5YzS1A5Xm9tJjwIYGUrxXwjjCOMI4wjjCOMK45nCnkygBy01VA4psf/X/895FsUiEFbOo5zVkjJfY", + "1C+CVeAhhF2oQl7AFjctK4CjSpxhB4PmFG3Ytmsu65MMwt7tlmHpjwAxYZjvIcdYC1zw+WAgIot2+e6h", + "as6dYwXBMMaCK9N2ROrA8ozjsSMW5jki5AvIB0sIHwt2Iop2iDcRyGI2HoerKQSkyMSp1LmpPzHip8Jv", + "09j3MRvIzFi3VnG3k5exNPrcyAbdLaaagOByd65yxBe6ci13tqIjXMIywjLypCJPKuJS4lLi0hkufQpo", + "spxL2/Od2qd5s8ml/SrYp3ulGi7SWBEaERoRGhEaERoRGt1UJ/N19HXDjK8UDRafmx8Htqb/2mAsWF9u", + "PQps1Yv+uyLB1uIgHWYemdxTvtxLjxT7AseDYsTeuBixB2jyGbSt6xmKPi0TkZ3omnai8Mac20p0fupN", + "2IhyVRwOUGRcM0gv1KthFi7OAFI13Dj2mYRAEgJJCCSzBZKBSAa6G9anwwDSq8pA21/h7xJ7hY9axm42", + "cSwAz/jddMOz6USrochw5WxDDC0tjPobCgkQT8i9sIM8A5vWPk/cuEysR7UyHTZdRGlzkAmbaQyBnxSY", + "owAzhDZUA9KoAu1O8YVw6zxPMsHjwq/11mayn/sVoRSwcEpkwk0WPD4f5BMb1oqlRD/PoEZnCt+vMgdv", + "UuvjtJZGD2CFwJmRapiEstyuUeh8Yn9bFefAEIK7ZU1C6CU+dq++k/92ul00ijBuKcvYo66vXWmC6fNr", + "V9p1L8hi1TKkNSIZ3GdnOk/iUMUwFnrAfuiCHYmrPxhgnGrpRT3ItF0+2xeRHgvDuhOTg0fdiT0GVq9k", + "FveqwXA1yX6uDGS+VU4b/EwlOwviSOJIOky47ocJ3ccb74B9rQaJjOyaEzaCJT+Y/Wm3V7m9sKSpyGc7", + "McgLvWMst7A7zJ2oJC6QuEDiws0TFxxvI9mtJC1INdDb2O2RFCscnUx8tSapmpX/+5NcLyNUpC+uoCiR", + "RHlEeaQtpO2ftv87qi1s2qMrNPBK65M8ZQcKY1S7QmaZIISv3/4ql9yoFJ5sMjp9O/ltuR5IXh9z07Le", + "BA8EDwQPpCIie1OiJ6Knu2BvWsGZVYFpzLMTYdOER2I7QRfqZZqUMMpuEzFBEcvTlFXyalarvJ488CqU", + "NUNXl2Q6d5EINtvOBlMwojOiM6IzUu0QnBCc3I3LsmvgUGGUnvu4lEq2v9oiFYv1ObzKIMynZP2CuaSN", + "rsWzW/VK+h5Q6CzS+Czq5l6avnfpv10yhBBzEHMQcxBzEHMQc9wNhQhPUxYLy2ViAgWclzu2pTKWJ4lr", + "z7xbyuABNzlduaVZ9kK1SOXHXpr6LNZWilT2ep+F32I70GTkjM2HD55b7FteuDm4Wizh7oXWh9QthD6E", + "PoQ+hD6EPnfnajFPImn6vbjjHj0RxUrUU9W9OAI6lZz13h6wl6JYBj69twcvRbEB/OmlcpLRxiAozVzl", + "rbcy5lBGo88WtPdEFOXO4COUZNNuee63I5vJtEzSabpkH0MOP8E3+G2mBzIRtZAUqHeaGpIBg68ZZ33/", + "7qeYtLwzoxpo2R/fQbDkslJu/MoLNhKjmXE4jbzhC5/JXA5qjhrhMWkYZ0dcxX39BQpqNYXQQMXadJe+", + "4WNROWIMQ+TefD9BITTJwYC59MHYoQwL46tggo9lg3bwbwaSNvR+DV3/CKP+uXxOYwwTYlxiXGJcYlxi", + "XGJcYtyrYNwSNB2ofi/vardE7M49ZZxS8rmSD3u5HXWO1TuIJ+dg58O7V7BJWZ6hXz48wnY7XTZI9NlC", + "GIZHd30xL4T98O7VbTmR3IcNuZemR65jCFsIWwhbCFsIWwhb7tapJG7xQYHBcIffBLVsl+vEXH7plSuJ", + "r0WkY9E5Vh9FJgdSmAquuF8wpPCXaMTVUEB4LYgbzKw+cauzchvPIBNmhN+sDDZlNdbW9WE2IT2UtK9j", + "ASGbjhwmGPPWPW06EChkFfvw1bN0XfK9OeIig/nBXNl4hv+qDvnGM88zuUqmr5eNfINytsKdD3AFrE/e", + "dyKWmYh8u4gDiQOJA4kDiQOJA2+8+gr3yMUc6BlpkXMePjPH+w7TX5XD3QrI4P6cO4D8/NRPilXSw30A", + "kInryc7UfQDfrRhbKRAUFE9RoAiMCIwIjAiMCIzuqKvgOKBKoCHPLp+/teeYoe2Hy9wh6SwAocET7q8X", + "ZAzv8sZqrGYTtLPZotfCBFDd4c33ZbCYMnx7MA7jhnH3c55YwgrCCsIKwgrCCsKKG4kVng/GHgBmuGJG", + "z7L9Ff4exIfZUZIPF95F469BnwsfmC7Ax3JbnlrJC416xvzLK6GGdtTae/RDuzWWKnzccQVZ95a19lr/", + "9wff+qu79fjz/977x96/yg/3/+e//v//+6O79ePnP7pbj3tbP//z5es3b7fef9z6xLdG/z4Zq3TLnm79", + "9fnr7sNv/9VgIU1XmRCHEIcQhxCHEIcQh6zCIR4V5nJIe2FwI/cU6xfs4Cl0ZJIPm4Ma3QXS6F6h+oTU", + "IYQhhCEULps4jDiMOOym2mEvgLA0b4CwD2m88Iwph99vK3xd0IkZduqle9ET8hHyEfKR5omIh4jnbhCP", + "p5fzn4Chhexc++Nf3K9eReWWQLh0fxaSJma2t4uRVjRQhl7q4E57ELfWS+Ze3jWTWL1mgjOpYn22lsl2", + "NeF7ORaftFo3scl9MKX1+kMmVmT7ubF67GbJuZK/yHSermYiXkk7DKkuXDEJ5b0DKyx4o634Yrcjc1rP", + "Zno6EtgS2BLYki6TdJlE9kT2t5vsK+S92GR+Hom/db+TxnI9IIPcr0RvWSdCIj0iPSI9Ij0iPSI9Ir07", + "TXrLVbhez7YkikR4ygf7mnPcXcaUOAqZksVhU8CHmaD+FNyBAI4Ajs6giV+IX+5qcIeSMZZwjNJWDkJr", + "ohFXSiRL6IXjTlQmYyFZM8K8qTy6HwqYIZnpKPAQHIqhY2fcXJxbAMqOOFbH6oPbm/bYn/+ox5b6yYHP", + "n612S3xJEx2L1h6sB22kJzx0L/FpKixVlZfK2eCTz96xY2yRuK/cbgrnnXNaJY2b3+dulk/+E9Rj3Yb5", + "xN/bsmsT1Kxhep07xNmqeV30uXRDPXzviJjC+hPYEtgS2BLYEtjeMbBtxKUK31a3zZVimSlx1pjpvPBm", + "DfvyBQU7aygJa73WuejORdaH4qERsBCwELAQsBCwELDMiYfGG/liAbMsU81tf/X/O4gXhkw70gPr1WeN", + "VWD9gskY9EuHKppXUTcZgg5O2rAJ9gUsZ/D1vGBszai0/PiybN3Co0t/zXdrr9XdefHo4acfHz7sPf+1", + "9/LnZzu7b37v7v/y+PnPrfohJkVhI/oh+iFDMjIkI/wj/CP8u5QwdGvj38LwdAs4rilK3e1GsO610W2R", + "ropojWiNaI1ojWiNaO2mBqtbG9QWhbBb7VAR49ndOky7rqehRIxEjESMRIxEjESMRIxEjBsI9rex412Y", + "VOv6XWCi5V4XzzDzJT4XR5ZnlrlmbVk5Fu6tf/d8nz148OCxW/HG3HaOFbgwGHkKgQeb3AwghF4zgO52", + "dx9sdXe2ujvvuzt78K/T7e58arVbmH9rr1UWPwuXS90rnqn4u6tv9RVV/jnEynOLSL9g4zyxMk0EGwhu", + "80wwGRv3yp2IwtRdQvwDP/m/WzvHebe7+2j6690/5w0XPlBr9KqOtedsk3dMmt8m/8BP/m9o0/TXc9sU", + "Yh1eYpuyPIFBqjfEfftTd+eff//n7m+/f9p98/DXJ7+/7D5+9vTT8ydHn15jsyYP/fDuh4+fft75e/fl", + "u5e/PHrw5snux97DeY10yZpbOCWQvjp4yu59UPJUZIYnScE+KPmfXLBX4ouM9DDj6UhG8MORzixsBweA", + "nwMpsvsd8C66RBFyQwNS2q9Mj4n/IfT4bz//+OPff3vSffjon0fdv//97f7v73FY6s8d7bzbefH42cc3", + "j3bfvdh90Hv8+tE/543MZBO4i4NzLf3CYAPciFfY/Jwu0ycMakEeYaSCIBUEGViTBE4SOHmEleLwuYXv", + "7a/w19tVr2qGA2lWNMKBbXulsx1fk4UnO1dlIoOtINYg1iDWoOMOOu4g2CLYunMGMsKjzLqoleWJWPeY", + "A9IsP+V4B1l/T2ApKOiWRZVasU3XIaTUmgci25d8GrJZ1e2x6rETUbj1ibMckyLKl5SZG9xlJCYrMDgC", + "ApFr9vvDp4d76FcIuUzWLaOTHNdwzUyepjqzrK/tiEGtuYrZS1e036v4WDCTigg2+kjHYiiUe92uNj7s", + "hg4C8GXgUd2rdf6pQO/dpwdvnj57+f7o4w/v3j1//sujxy8ePu99bDgV2P394W8/vHnz4pejB7v7z/++", + "8+vjh88enOtU4Jao2d0KvBEt+9yMLlPJ7ipBOnaSe0nuJR07iX0k9pGOPYgTGw255nJcJd7aOzR4uWj3", + "AlfMtYm0Bm2mMGtEKEQoRChEKEQoRCgrhVnzxrHnUk5vf3V/zhtdDQyBF4dWQ1vhTcRV80i03JwAW0QR", + "1Qh0CHTIBIFMEIj0iPSI9G5DRLUlpLd6OLUKuC0z47xN2NW9Hnor0kMRnhGeEZ4RnhGeEZ7dCgvRpWS2", + "cvy05hPC2eBpN5zLruW5JvEh8SHxIfEh8SHxIfEh8eGGA6Zt5KB22705rmHNpmfv3dDM0fYZoWI3Dzm8", + "fd6Z+0zaEcu4ivWYxdzyWfZ0D99WjeDONXEaJ1M2QkRCREJEQkRCRELEu4CIAGrnxMM04WoFv3J4rNmV", + "/C3ksKb7OOR34zzG0VPW8a+rf8ftltZmsp9bMcd7VcYUa3S2405EsbTnTkSxStd9lzP4Jny1L6h3FL4j", + "HTcj3BtddpeZ318f8dlat/EYNwyevM3cu2slyivTLtRu0RyCw/FM7f1njcGBK82JhUgPw7dfZzbxpGCZ", + "sHmm/NsO4qFb03EjN5bbvOpOfqy22J//wK9/4pGj6z/3QhbaZecST/YLfAQyryWNMz6wDSnh+9nHeRaN", + "nLTQkCL8hA2YFzUZsmmeqwvRKOHqCNN+95TBTomWv1XhwfWru+9T7rsF+EZ52ruOPrd3/dzEF+1R7wom", + "L3oS7EmwJx81kmtJrr2rXvQBvYIs+zbTcR5Zts8tT/RwVdd5wKQ53vJuq70gD3mXNdbjst3hoVF0bkB4", + "QXhBeEF4QXhBeDHPBT7F/X8+YUzry7e/uj8H8WH2UhTftpX4MmVGkWYicj0VrBQWgAlqpYKaD2YjsMqx", + "OrBeIWV8Q+TAjS26dvMkEzwufO3d640Z6Yxh3VisBa7emRiITKgIZ0bCwWIjzfuJNCMRh6Jn4cg1y6PR", + "cgONSocstNK40tiY7daXraHemtHXNn37mdiM2IzYjGw6yKaD4JTglOD0cuH0TYmG56bTlQMxAUFOjBqq", + "AZgQLs8bc2lNeqQ4S0RsRGxEbERsRGxEbERsNzLO0lJcWxhaKaCYjP0V/x32foHSjgFg2DxTbvYN3HMW", + "BzQ3ojkg0yaZ7MYo8+be/eQ7NnSnBg0re4sqVWOFm9f4XdnjKhgeGstts93yK8j1PGbLmPK7rJYv2iiN", + "bNAIawlrCWsJawlrCWvvRHyqFZh2UVCqCdTOi0Z1wxWFF2M3+E6kCY8EduJlR50i0iPSI9Ij0iPSI9Ij", + "0rtbkabOf+K8zeNYrxJPoBxoxuN4y72WA2+5OD/IQA/zvg26y28LbqOvREjwncO4MXKoxm4a3LA4CTAf", + "aoESOhQpYZ2uq4VK6FCshMb+cWADn2ajJXSubbiEa+UfD2vrdznJz8/hMjzloXRylycBlgRYEmBJgCUB", + "lgTYOxovYLF0+T2BBJQ4mxXIFsitk+ACQCd0vtHEbFcXHAEHhbzwiCiJKIkoL5You4833gH7Wg0SGdk1", + "J2yk8yT2U5a5bFHbWGJF5LOdRGsMvQPmjsEasnGiEjcTNxM339hAGIv59rsOhPAzENcSv8RwW/F8zt6o", + "d+INJvP23Gr6fiZ3SkJvQm9Cb1LmEpQSlBKU3kh3ynMC6SIny7k5zrNR916TG2XFqzc/+g54vOLKX4ox", + "AdkOEG4SbhJuEm4SbhJu3gk3x3Oz5iLnx3UsBibOkKSXvBXWDVfuwkkoSyhLKEsoSyhLKEsoe7f8ODd+", + "lI+3odZvuqhVEh8IB/NzL5bwGd2m6MAUeIOAjYCNgI2AjYCNgI2AbS1gC9xUpaZzMpqPEDyf0d7iA0sZ", + "zWdEjEaMRoxGjEaMRoxGjEaMdmcZLXDTWvoznVmebPsgOV/h71GSD79tYzCieVHSfnG/Mngclp5IK5OP", + "RcYwww57P5KGCRWnWircjl3toqRg4kuqTRjikM502OaznCFGaNNbyO61K2clbCz75GLtDZuPqZdENYJW", + "QMd1EG4O4tZ6ydxysWYSq9dMcCZVrM9WjfU0k/C9HItPWq2beABhuPZzY/VYZOt3DCR/kek8fVKsmXYY", + "Ul0k4U/Keweu/LAaWPHFbkfmtJ7N9MQiqYCkApIKSCogqYCkApIKbqVUIKI8k7YAqEXifa9PhOrlDkn/", + "+OzIZCI5VNG78v+qEAFZNMoO1uW7JJ4yPjMnbvKkdg2Rk1eJE5zIsZxzIdnuQ4gJK8f5uLW30+0CmftP", + "7YZIqZu9p6wMybpwFZy0fzZWK6EaoRqh2nqoRqRCpEKkckNjY05p/Tw5NJHIklCYvDmruTEwK7vwBXlc", + "VPf5S3azmC6akIKQgpCCkIKQgpDiDoQNbCSBdbQb237h53aBb8FB+YyZgzGsX7CDpzAqOdyyMksjk4Km", + "9CLnRZK0fklMvKjejNfqi9XtNF2J4+u/OLMkmWq+2yV4te0zJ57TV9OswkkUp48giCCIIIggiCCIIGgW", + "gipb8lKlSgWA3Kaciu1oJKITndttI4yR/ubMhZqXkIL5FPNULkdQwL5/+ggfviDly/78Ev0efNn3eyys", + "kbfnoXs/CGoIasiuh+x6iOqI6ojqmlRbU7BVgbpemu4xBIwpskMFzBKbnfBUs9XOUcjjMkxkfGFkHkPE", + "Q8RDahza8GnDv6PmMWay7YZtvtyJ55vEfEiNyKypnL0wxAfjehVDupryt2N1rA7wDj3/FYu1MOpvFgWH", + "tpuH0Nt9EXQLnZkkKGPUnk155lZYNwmgyHhyg1+a6VMZi9i/4k1xZ10TAgicX0m0Dm9gtzVTx2aNd4iC", + "iIKIgoiCiIKIgoiCFkcOdXtyoIxmDGpQdWx/9f87iA+zl6JY5YLPQDKl0c6JKOZd1DkBk+UBBeo1WRhV", + "gC6pJF4gXiBeIF4gXiBe+I47GhfywoKbGFdjgKGwVwYAm/MSKvULpE8gPiA+IDsSsiMhQCJAugO3Cn63", + "NmXbrfI2EWNX58VmJTxJWPXpKacg9lxnaNTipmHlQcYjt4u3WW5wcLfd6yoqASGVsYLHC81VnlWrecGo", + "1l4teI1UUZLHAjk1bo5i45P7EvpaJ4KrKwpXU+lCOokiciRyJM0SgROB0922x6kRTQWjarwx3z7nMBUK", + "wvnCkmlHmRDMbayG6UEt6z0MzCfiNvMU0AbPH+PkuajD3CC7hMx7fRcsds+PpRK4i8GP9UwxFaxeSeGm", + "8EBwm2foP4RbmetWbqWbJ6XFThXNIFeTikgO3BI/tVj4nY+HuteSKiFiw3hZKDdGR3JiHORT3QerpC32", + "BFtdJ8hYDKQSvhMmOXledKWz49a+e6eNYEdHh1ObzXGr47I+wuS1nBNhWaFzlnJjGE+0GmJcoYEc5kiY", + "brIngg0zrtw+PF3qB4OLgjRlvaBZv7HfmRHWJTHHLXbPFTDpOSzhPlTr9WynGTbip4KNuSqgSRE3wrRx", + "KfKZsjxlucOHrT53GWO13HDKcYq5uKfcwCbiC2y30qGIcQjYYewZXoSzB3Mj8jG0HSJBgTvdbrfLegfB", + "rz/Os7D2QaGOhaSO3USbmiowjD2/qYSXx2WrVVJgs7RyYweQc09ptYUHrPH92rRJ3e6DHfpSFB12MIBx", + "slkBIeBDCCglzmrJUNaYJMQFnSeZ4HEBE56rUHglXbs2n2FhG3CZhBn6Q/cxrhXQukMVCVaforDieic8", + "V02PmmMdy0HBpG1j87GlAAbNHpNV9r4MRfPm/TArLUALxAOV5tZctvNlTYghN0sSckjIuWD1+OONt2Bf", + "q0EiI7vmeEU6T2I/Yn7/cy9tSbqRz3ZCOkF37vhChD2tcZxIlCNRjkS5G+tLyZvEufnS3NqK8e2vlU/u", + "iecliH7bBgliBd05PsekMblAe746a6I4V4VPh9d94aWkmAlpRyJjfQeehkkY/QpKN6rPKy1/gfW8eOV5", + "Q4Zzu++aK+ZXLFFnscieFLWiFr0PMBSHPtGVnwZAbehIgGiZaJmOBIgjiSPpSKBEsGGApjUPBhC2goKb", + "s74Y8VOpMyeFlipnVLmiarNBxQ5AWAAFgn4VZF7XgbDh4KiDxjJmmU4SN5gsyxNh2m5uqxNYo3D8vO5y", + "Up8zGQuWcTUEudgrmf1tlyaoR41Uw6Aid3saG2snh3O3/LkcY63+ZrFuVnvVsYzAT9grcpU4813YYb/7", + "OoDGFCg4IDH0AOpuG7rBBNWze9i3wDDuFzM+di+6awT2JrzVHpx9LN+43HVmaBvzlMY1TgwGYDAs7Jnb", + "4xxj41euXhgXV8X49ZdU+kME932HHcEJCpzB9LUduQzHXMXc6qyAwiv94BrjZwf0HGdpJnUmbVEeAUAb", + "6uc/MmMAmdhQ0WGv9JnImMrHfZH5nEZy6OSDkF0bh7HL+iIsZvCEseUj1cqU04xXJ1eoEqwIMe4KPLd6", + "7PrDZTnmKucJy4QbUfdkmOAGLYL8xfxtxlnMZVJUM5eGif/kENawkgG03vBxGB1xKrKCxbxg9+RQaTiw", + "KOd7OIrBY6Z301+HCX/m8hzxNBUK3gpcF91CB2PGE7fYwZvgC+UWVcHCdtgT/PlfPbfU/eud+5L9xF4f", + "vLn3mn8JRfZgHrbZ695v90KCJ2KgM4Ep2uy1VPWH79+vd39QbY3ca+m22qj00q+dM8T+Rl0JTRHK5Jmf", + "96Eh0pTTRxorI5aJIc/ixL3keoAbuoR57wQZKeJ55xYoGtxgkfHiT0OgiypHIld4IuIFOToWIUGPBD06", + "FqFjERJnSZy9w8cicwXayzoacQOSyRivXsmb7OfwAbC/qhveRD7MVYMpkJvWtdBTEkxR0J5OD6zHZOMf", + "EqdS52bGmqiWg2/hVjD1SrnMwDZpbhbSlNZHnsrdrNN2JLIzaQQG3irjbrlsQmdMzJBAZgGUn/hCGB/A", + "AeqYp8OMx06gj/WZCv8P5XhJwUsBFSMzWAo8gTZ0oDcN9HQH28JfItNQhpVjMSsMhKpfohnTzRYKyESK", + "ZAGSBciD+G54EJMwRMIQCUMkDF1PYegwcPcV2oiBx/NcE7G6CGBGsIhhKDdvKIbnc+BdjXKOUAOdRf4k", + "q1f3zPYeSGbEM5wlI256/oQveBfhOiEzhr7Yoe8wqtw4T6xME+HFjMlFlMzlmAmbZ8qBADio+FVjunyQ", + "bcAlXKtToSQc+GSCG61MO7iAn+nsxJ82wrlZrQehnYvs24aiat72Ebr4Zlu3NdmWOYmsZljmT9Rae63d", + "7u6Dre7OVnfnfXdnD/51ut2dT602WJJx29prxdyKLZ/H7GWgG7U7W1EowYEi8zKSNEjSIEmDYhURgxOD", + "36FYRTVSPPXQdkEQvjxYdMPJQyZO9Ylj3dLz2o1yxb3dM2mH9czESG6+S/R87+c2vvrHrbEcOq5Vw+NW", + "+Bkt7IJtnXcwhmOEZMqlnBt2JpKkc6x6ZaVDaIG8FBq8SdxIGqszGfHEm/6YNmbe0BGpTvOEh4MUf8rR", + "s8zRpLF8nHbYr67+3obIGzK6X1kfLJ9gCWjPiAfSMGPdhI+0MjLGRQTM7NpVJ2toeyZspr1tYOW4Izjr", + "49sjDZNjuCEXz3bajI+1GnrxBdDLtBnP3cKkhvMigV+vww2KLk5ETkRORE5ETkRORE5EfrHh1VfTiS8I", + "t17lu37BZHwR8UDrCt+bD2ndK7f5IM0qcRxxHHEccRxxHHHcLdKsXqBOdRt1iMVcc4Z3YCBgqrrG4JjI", + "Vez9dGNu+Xy/3KBS9EWB9tKkEOIxyrQxExMF8NFk8Cqgb+2TPFOxPlM/+6SZrw0Yf1mpdG7KbPWAGTGE", + "VoIu1ttLhO/A3MEIYFC3aRa+HO9k7P00fVgeW7oT930NJo69vpnVEJtQ11+le1DE03U989839ZWP0ClU", + "Jt2899YTwfFT4cG/WyVcX7sEiTR24pWLdT9zTUW/YFdbC7bfuLy6X6H4ZfztK33TMLw9PV2PLM+gg0Bz", + "jT7xVsMULKozc4+VthSup94932cPHjx4zLDHO+wpLh3liUHCjQ0uxC+E+z7LVRQ2qDBd8oTjFEHLw0o0", + "X+hRNwhNViFuwb8cq5CZ/nqm4g33ltJneA25Ixalz1xPKDbcdJ9ZfUU9hq+5kX+5xKvEk8IX8AgTzJ/a", + "izacXydZLK8gRJ+WY/GXo0KwOgNyingS5Qm3gSiwWnDH++qteC/H4pNWojkOV+vD+/2rtUwKa7B32g+r", + "GknRJEWTFE1SNEnRJEWTFH1X7ZNGpYxzYdI0SAjgIN0YSAzDDY15doJ7twnSCnpq1m5taBCnMWaVklaC", + "IQ8KqCF6Uof17HSmPivMVxrwDI6ZzjEnL0OCG4BO3GSBcEtVTwCZzUZn6rADy87ArcEWqQ8R1heOF6Ig", + "wkI9fBeyvn8DfW3AwRkcHnzFpgo0eb/sMxCsP4Tq+1hVvkhUFrhuaoozNp1rtW+DQUzVUYMniT6DnRCD", + "YJUFSIwfpQqAam8lFWvXIKOrQjxX0Qhjwtnm0L9BxyAHcN9KU6AmKLIyK6HpN/JsbPMe2e+a+maNKE1k", + "RUVyA8kNJDeQ3EByA8kNJDfMyA1I599x/lYWbKoiQFMozqPKw62LwaVqERjB5rJj19QaeSOD13x0Wzlk", + "sOry02MTXIM0IfzyaT0rw8QXK5RxMg6RDsWNpFAphDOEM4QzFxI3sooaAWSOargyn2RAAVp+XMULE+I8", + "1pR47FAlRWUwagVMLsbCcOhzHPqmiGklhVil2gsVWBPjge7Oi0cPP/348GHv+a+9lz8/29l983t3/5fH", + "z3+GMuFGhdZe6//+6G79+PmP7tbj3tbP/3z5+s3brfcftz7xrdG/T8Yq3bKnW399/rr78Nt/zR6H3yL/", + "PsIjwiNSBJEiiMiJyOl2utOtQk6lI92Mfe3tYZa5RoaMWz8p/JFv+VAl9F24l4Z5q9AyUndVEEXjUoiY", + "Hc8z+uT25gdPq06KZ19SrmIRk4EiHTQSXxJfEl8SXxJf3hUDxdXgMuU2Gs0qiJ64r8M+66ZPpMdjrmJc", + "9cdcyTR4e2S5gpsRa2q3zrFy43oiCu/F48b2z+10xI0w21/h70tRfPvTjVbD99twMfn2V/cHnptV3IlY", + "2lumtrvYY9pnsVzRlq179Ye0dOhK1EfURxd00KkzsS2xLbGtZ1vHMBs/c97mceyt6hqDVMCN/zxJGD6H", + "zi/1I+iD8Kr6+y4gkAIMxhhIGsbTCMtyJf+TC9YvMLODhhNpl7balh7W7padSq/HmCAOrAOb0Gluivua", + "8Czj5KlNilBCYkJiUoQSLBIs3n5YBG6rHRrzgFILFKKNrtXe2hG9BmazbIfIXnj2HKbZiSjjeck4yKOQ", + "YJb6Zj03EGFIq7kC6F29B4rnTbpDmXiUeJR4lFS0pKIl6ibqJsegCSRvUFVb/76HmtRvcxW4L4Sd0thi", + "jfz1E03Ba28ZiLeXVtd34i3SGV8cuhOKE4oTihOKE6QSpBKk3gYb2aWEOtdS9kMa81mndM+X93zcR4jN", + "GGbYf3KurLTFHkvzLBpxsK+FN1cqY90oGDc+kfvfZF6Gtax85v4MtuZQFSLXO6P2xrl3lTa9xM7EzsTO", + "xM7EzsTOxM53g52ROi5KwYvYOz/I/T78bmYCAnSO1a+u4/Gw3L23PAwT+q/5kygJR06ZgMD0Gow26gGj", + "JmPrtnuIdo/jBhSOUI5rIURsnzXkgEfIM82NYOa6xkpkUCsdz0CqJDkcQEesypnvMa2rTH06NMV8qM1M", + "afyguWVrPBaxexWTAie1b6uGmKzkG0e+cUSsRKxkeEFcTlxOXH7jDC8AczbvHYcXCy0gcrdggp1qQyQI", + "sHIFijbe2NUtqjyKdBb7NRfexVREcuA7tnOs9jFqK9wv6hbwPB1mPBamDbcPh/+7vNOEK3/3kWmAcfiB", + "YHydaP443FcIw1iD8FpAQwmPCY8JjwmPCY8JjwmPCY/Pg8dAFZvH47EcZtwu4OPX+EBdZS2tm57+hs+g", + "vDwVmUOAsPyENckhbudYHQxYqo2R/US04Xcs2SWAsesLFrsluarlhFRK23kJaspuvFg0ni6+fsHqLGP7", + "DiDIntF4+57rwdWtjbcwlJ1bv961HlzkfXWOwNlLGD6lszFPHNHNilQh54jHQkUifK0Ez8CAQOD4RoL1", + "xcBtInjWgdfQTqnV236eilOpc1MX8KZaEKoWAi1vNIoyz6xUw7cjbkRzd4LHLfYhxBKcnOHMHgyo8u2Y", + "amftMWgPZuE31YHMjPXZh7LcG9pqt8ZSvRJqaEetvZ2GBiBPfMS3vLkBU0sASLdW+zfXNWf1Sk/SwAOJ", + "W4PswjUGWyDH+bhaf7dTDEUGDdjUEY7fO1rlWtWa2f/gcSA1OcyzOqyWC1nbk0ttcfOhwS0/EUwMBiKy", + "k04zeZrqzO0W/WKm39rsh263nMEhmM81Oyoi6ZikY5KOSTom6ZikY5KOSTrejHTshdTNi8dO2NDZAvH4", + "HT5g3MITDHWmDLt6qpi6/GXWRsvh7UT68Nf9wQkRXGY3i8ew9ikrVe7mvorFQCqJpkHTEq5vw22+JPA2", + "mzWRZwChMqEyeQYQRBJEEkReIER6lNs8ROYq9OsWMiK3XoO6gpNAOSKVpLOMNyliv1ICUR4Zr5P+kaCK", + "9I+kfyR0JHQkdLwop9ISv6qYtgo87m7DBFpyfYtUQ3x/8GG/08enrqyYDWRiRYZWDLEbTqMzlvKhVHNo", + "MZHGPoOcPu7OQmJTD04e2d6H/N9OsscCW9/a6ydN5Fja1uwN2vuoaTp4eqw+GDHIEzADyHh0wtJMDzNh", + "/D02cAc2GmqkiY5Faw/WnOYbslF/BZA7mS9j/iUYPTx4tNQGon4VdnsNHC2NRGYea0/Z3ch4KXzAgB+V", + "tQrTo2dXS/lejgW0BraedUszOVoRrJkM7GLWqh72/jqlfJuz2OEbUvKIf4vcKh9jmPJ/Hh2+YTjM8+5X", + "xzwu9v7zAz+Q8HLW3hYRrwPUpJUmrTQJUFUBisiayJrI+obegjOFvxWuRop1QO1SQccjxE5BtI540mq3", + "8ixp7bVG1qZmb3t7Z/fHTrfT7ezApu6z/Br2+/3cWD0WmemlqQHWm/7BUUcqGvD1V4fnNeRvs0LnbvNj", + "Y67cflPoPGNRyOlvU/ePM7+3Mh7B1tgv2B9uvHgEl5bn5vO9MZeJ1Xv+2/9Pp0IBZXeiROfx/c4EXOqy", + "x2xtj5DnDMSUcduBA1F8CSOtTD4W5W5goBln0sCdkFgeez8SBuQeloGPArysuRGZaft3wTu7GnyjYIWO", + "BfwXzcNjYeQQjHpNqIs0DOa6qyNPkoINhRKZjNpMuFfJ9cIgEV+ke6sq05fxKNPGbXcZ2HpDFcGrNxLK", + "fedKLFIZuTzbGPbSFcg4dIBhPNxxKWFnHEiBelWpcMhMYawYw27JoZEQ7NKPY4e9BkEHepIPh5kY4i3z", + "HjhdKsGjUSi1PkjQ8CZhyBsRC+jE6vxJMx3nEZo/mzZLMxnB6ignXV41HNGDAXSG6bBJwW99Hvvc8kQP", + "581mt17t42zI2FudWZ5M5nQ/l0nMpNriaQqdsjXgUJOYm1Ff8yw2bq/KfLVhbkBCFOnsSEj3rWuXVCwT", + "PNlCQ37fK8xEOhUxS6FcZvWJUJhBX+DE4H4LhPz7YsSTASypSaLhgiKbSVhs/PvkjcoPU6FgxFjv7UFl", + "MLB9DV3xRtvSz9sEE3ZHG3qMO3Mmh0PXONiZg1s4vlSJGIM/Ck8wSKobHmyzHWXCjLTb5N3EydwUEbGb", + "6SbPSvitrxg4ujxxb5PgYz/lkjNeuBcH4bfDoL7FVCrp93CfsF7VCpO4HMfCtmF7wVq5yvz48L/bbKfb", + "/W+cYTsPu//tdZrScY2yI7ffQcOg+11rO+yPd4LHgD2f74X1d7JmSb0d68hsD3MZC7Otqt287fbCUynO", + "qmtabSAaBsq/h9isgo30GUwH/0qK6gs58QBxRMKTwsrIsDTPUm3cAuWz8rMtWPSLGJUw4zyxMk0qr7tW", + "rtdGOsbeHmY6T/Glex2eHdez9LdlBQI3fOwryJwE3LTiNSxrk77BCjd0yiutT/LUT4+Jht5YbmXEYm45", + "DrV3rZHCTDL1aQ8maRsKwN0YJg7EPiiVNjgd9KC+bLmycUvosEpSLw+CYF6oaJRppXPj+AZ9HrD32szA", + "S1ywMS+COr7iPMZKbINGgjDvpXvfJM8Ocxa8Z5N3trJ7g50dLsTCdUUkfNtAk2XaTI5T/6L/J9eWb/W5", + "a4hfmdvVFXyyFA0Et3km3IuLHVTZ0Kr1rdSoodZPRT8fDsNMdlIB7DwqTrVUtjpB4MmmlwYrFlaL+uaR", + "yIGIiijxKxe49nDj9m2oUHVLKQFpfhm4TgfXvEwPZMhYqlONZDDJ8Ak+2JAdyCMDHrlFVGYxS3lmC59H", + "6IqUFzAguHVXO6KXpnsMa8sOQppGQgK3G5hICH2h7tOZzUVC327wRsr8/gE48MUKBY5v5Wb0N8MGuYqQ", + "fKQtqj2BLPr52/8LAAD//xRyqf0IfgsA", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/client/go/client.gen.go b/api/client/go/client.gen.go index 27926022d3..b408d3cc3e 100644 --- a/api/client/go/client.gen.go +++ b/api/client/go/client.gen.go @@ -359,9 +359,9 @@ const ( // Defines values for InvoiceLineStatus. const ( - InvoiceLineStatusDetail InvoiceLineStatus = "detail" - InvoiceLineStatusSplit InvoiceLineStatus = "split" - InvoiceLineStatusValid InvoiceLineStatus = "valid" + InvoiceLineStatusDetailed InvoiceLineStatus = "detailed" + InvoiceLineStatusSplit InvoiceLineStatus = "split" + InvoiceLineStatusValid InvoiceLineStatus = "valid" ) // Defines values for InvoiceLineTaxBehavior. @@ -3228,7 +3228,7 @@ type InvoiceDetailedLine struct { // // New discounts can be added via the invoice's discounts API, to facilitate // discounts that are affecting multiple lines. - Discounts *InvoiceLineDiscounts `json:"discounts,omitempty"` + Discounts *InvoiceDetailedLineDiscounts `json:"discounts,omitempty"` // ExternalIds External IDs of the invoice in other apps such as Stripe. ExternalIds *InvoiceLineAppExternalIds `json:"externalIds,omitempty"` @@ -3305,6 +3305,14 @@ type InvoiceDetailedLineType string // commitment. type InvoiceDetailedLineCostCategory string +// InvoiceDetailedLineDiscounts InvoiceLineDiscounts represents the discounts applied to the invoice line by type. +type InvoiceDetailedLineDiscounts struct { + // Amount Amount based discounts applied to the line. + // + // Amount based discounts are deduced from the total price of the line. + Amount *[]InvoiceLineAmountDiscount `json:"amount,omitempty"` +} + // InvoiceDetailedLineRateCard InvoiceDetailedLineRateCard represents the rate card (intent) for a flat fee line. type InvoiceDetailedLineRateCard struct { // Discounts The discounts that are applied to the line. @@ -41072,1127 +41080,1128 @@ func ParseListEventsV2Response(rsp *http.Response) (*ListEventsV2Response, error // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", + "nhoLAA==", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/client/javascript/src/client/schemas.ts b/api/client/javascript/src/client/schemas.ts index ffe7cd9c29..4ac657173e 100644 --- a/api/client/javascript/src/client/schemas.ts +++ b/api/client/javascript/src/client/schemas.ts @@ -5720,11 +5720,6 @@ export interface components { * External calls always create valid lines, other line types are managed by the * billing engine of OpenMeter. */ readonly status: components['schemas']['InvoiceLineStatus'] - /** @description Discounts detailes applied to this line. - * - * New discounts can be added via the invoice's discounts API, to facilitate - * discounts that are affecting multiple lines. */ - readonly discounts?: components['schemas']['InvoiceLineDiscounts'] /** @description The invoice this item belongs to. */ invoice?: components['schemas']['InvoiceReference'] /** @description The currency of this line. */ @@ -5781,6 +5776,11 @@ export interface components { * @default regular */ readonly category?: components['schemas']['InvoiceDetailedLineCostCategory'] + /** @description Discounts detailes applied to this line. + * + * New discounts can be added via the invoice's discounts API, to facilitate + * discounts that are affecting multiple lines. */ + readonly discounts?: components['schemas']['InvoiceDetailedLineDiscounts'] } /** * @description InvoiceDetailedLineCostCategory determines if the flat fee is a regular fee due to use due to a @@ -5788,6 +5788,13 @@ export interface components { * @enum {string} */ InvoiceDetailedLineCostCategory: 'regular' | 'commitment' + /** @description InvoiceLineDiscounts represents the discounts applied to the invoice line by type. */ + InvoiceDetailedLineDiscounts: { + /** @description Amount based discounts applied to the line. + * + * Amount based discounts are deduced from the total price of the line. */ + amount?: components['schemas']['InvoiceLineAmountDiscount'][] + } /** @description InvoiceDetailedLineRateCard represents the rate card (intent) for a flat fee line. */ InvoiceDetailedLineRateCard: { /** @@ -6083,7 +6090,7 @@ export interface components { * @description Line status specifies the status of the line. * @enum {string} */ - InvoiceLineStatus: 'valid' | 'detail' | 'split' + InvoiceLineStatus: 'valid' | 'detailed' | 'split' /** @description InvoiceLineSubscriptionReference contains the references to the subscription that this line is related to. */ InvoiceLineSubscriptionReference: { /** @description The subscription. */ @@ -10950,6 +10957,8 @@ export type InvoiceAvailableActions = export type InvoiceDetailedLine = components['schemas']['InvoiceDetailedLine'] export type InvoiceDetailedLineCostCategory = components['schemas']['InvoiceDetailedLineCostCategory'] +export type InvoiceDetailedLineDiscounts = + components['schemas']['InvoiceDetailedLineDiscounts'] export type InvoiceDetailedLineRateCard = components['schemas']['InvoiceDetailedLineRateCard'] export type InvoiceDocumentRef = components['schemas']['InvoiceDocumentRef'] diff --git a/api/openapi.cloud.yaml b/api/openapi.cloud.yaml index dc72f52ca6..3867fc8e82 100644 --- a/api/openapi.cloud.yaml +++ b/api/openapi.cloud.yaml @@ -16814,15 +16814,6 @@ components: External calls always create valid lines, other line types are managed by the billing engine of OpenMeter. readOnly: true - discounts: - allOf: - - $ref: '#/components/schemas/InvoiceLineDiscounts' - description: |- - Discounts detailes applied to this line. - - New discounts can be added via the invoice's discounts API, to facilitate - discounts that are affecting multiple lines. - readOnly: true invoice: allOf: - $ref: '#/components/schemas/InvoiceReference' @@ -16902,6 +16893,15 @@ components: description: Category of the flat fee. default: regular readOnly: true + discounts: + allOf: + - $ref: '#/components/schemas/InvoiceDetailedLineDiscounts' + description: |- + Discounts detailes applied to this line. + + New discounts can be added via the invoice's discounts API, to facilitate + discounts that are affecting multiple lines. + readOnly: true description: InvoiceDetailedLine represents a line item that is sold to the customer as a manually added fee. InvoiceDetailedLineCostCategory: type: string @@ -16911,6 +16911,18 @@ components: description: |- InvoiceDetailedLineCostCategory determines if the flat fee is a regular fee due to use due to a commitment. + InvoiceDetailedLineDiscounts: + type: object + properties: + amount: + type: array + items: + $ref: '#/components/schemas/InvoiceLineAmountDiscount' + description: |- + Amount based discounts applied to the line. + + Amount based discounts are deduced from the total price of the line. + description: InvoiceLineDiscounts represents the discounts applied to the invoice line by type. InvoiceDetailedLineRateCard: type: object required: @@ -17351,7 +17363,7 @@ components: type: string enum: - valid - - detail + - detailed - split description: Line status specifies the status of the line. InvoiceLineSubscriptionReference: diff --git a/api/openapi.yaml b/api/openapi.yaml index f77ab5c6a4..d1a8cbcfbf 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -17174,15 +17174,6 @@ components: External calls always create valid lines, other line types are managed by the billing engine of OpenMeter. readOnly: true - discounts: - allOf: - - $ref: '#/components/schemas/InvoiceLineDiscounts' - description: |- - Discounts detailes applied to this line. - - New discounts can be added via the invoice's discounts API, to facilitate - discounts that are affecting multiple lines. - readOnly: true invoice: allOf: - $ref: '#/components/schemas/InvoiceReference' @@ -17262,6 +17253,15 @@ components: description: Category of the flat fee. default: regular readOnly: true + discounts: + allOf: + - $ref: '#/components/schemas/InvoiceDetailedLineDiscounts' + description: |- + Discounts detailes applied to this line. + + New discounts can be added via the invoice's discounts API, to facilitate + discounts that are affecting multiple lines. + readOnly: true description: InvoiceDetailedLine represents a line item that is sold to the customer as a manually added fee. InvoiceDetailedLineCostCategory: type: string @@ -17271,6 +17271,18 @@ components: description: |- InvoiceDetailedLineCostCategory determines if the flat fee is a regular fee due to use due to a commitment. + InvoiceDetailedLineDiscounts: + type: object + properties: + amount: + type: array + items: + $ref: '#/components/schemas/InvoiceLineAmountDiscount' + description: |- + Amount based discounts applied to the line. + + Amount based discounts are deduced from the total price of the line. + description: InvoiceLineDiscounts represents the discounts applied to the invoice line by type. InvoiceDetailedLineRateCard: type: object required: @@ -17902,7 +17914,7 @@ components: type: string enum: - valid - - detail + - detailed - split description: Line status specifies the status of the line. InvoiceLineSubscriptionReference: diff --git a/api/spec/src/billing/invoices/invoice.tsp b/api/spec/src/billing/invoices/invoice.tsp index 81e1681ca3..c0272a7f09 100644 --- a/api/spec/src/billing/invoices/invoice.tsp +++ b/api/spec/src/billing/invoices/invoice.tsp @@ -463,6 +463,7 @@ enum InvoiceLineTypes { /** * Line status specifies the status of the line. */ +// TODO[v2]: Deprecate this type altogether @friendlyName("InvoiceLineStatus") enum InvoiceLineStatus { /** @@ -474,7 +475,7 @@ enum InvoiceLineStatus { * The line is a detail line which is used to detail the individual * charges and discounts of a valid line. */ - detail: "detail", + detailed: "detailed", /** * The line has been split into multiple valid lines due to progressive @@ -762,7 +763,7 @@ model InvoiceDetailedLineRateCard { */ @friendlyName("InvoiceDetailedLine") model InvoiceDetailedLine { - ...OmitProperties; + ...OmitProperties; /** * Type of the line. @@ -804,6 +805,28 @@ model InvoiceDetailedLine { */ @visibility(Lifecycle.Read) category?: InvoiceDetailedLineCostCategory = InvoiceDetailedLineCostCategory.regular; + + /** + * Discounts detailes applied to this line. + * + * New discounts can be added via the invoice's discounts API, to facilitate + * discounts that are affecting multiple lines. + */ + @visibility(Lifecycle.Read) + discounts?: InvoiceDetailedLineDiscounts; +} + +/** + * InvoiceLineDiscounts represents the discounts applied to the invoice line by type. + */ +@friendlyName("InvoiceDetailedLineDiscounts") +model InvoiceDetailedLineDiscounts { + /** + * Amount based discounts applied to the line. + * + * Amount based discounts are deduced from the total price of the line. + */ + amount?: InvoiceLineAmountDiscount[]; } /** diff --git a/openmeter/app/stripe/entity/app/invoice.go b/openmeter/app/stripe/entity/app/invoice.go index e05ccc93f0..ae21a10917 100644 --- a/openmeter/app/stripe/entity/app/invoice.go +++ b/openmeter/app/stripe/entity/app/invoice.go @@ -205,12 +205,12 @@ func (a App) createInvoice(ctx context.Context, invoice billing.Invoice) (*billi // Add lines to the Stripe invoice var stripeLineAdd []*stripe.InvoiceItemParams - leafLines := invoice.GetLeafLinesWithConsolidatedTaxBehavior() + leafLines := invoice.GetDetailedLinesWithConsolidatedTaxBehavior() // Iterate over the leaf lines for _, line := range leafLines { // Add discounts for line if any - for _, discount := range line.Discounts.Amount { + for _, discount := range line.AmountDiscounts { stripeLineAdd = append(stripeLineAdd, getDiscountStripeAddInvoiceItemParams(calculator, line, discount, stripeCustomerData.StripeCustomerID)) } @@ -304,7 +304,7 @@ func (a App) updateInvoice(ctx context.Context, invoice billing.Invoice) (*billi stripeLinesRemove []string ) - leafLines := invoice.GetLeafLinesWithConsolidatedTaxBehavior() + leafLines := invoice.GetDetailedLinesWithConsolidatedTaxBehavior() // Helper to get a Stripe line item by ID stripeLinesByID := make(map[string]*stripe.InvoiceLineItem) @@ -319,7 +319,7 @@ func (a App) updateInvoice(ctx context.Context, invoice billing.Invoice) (*billi // Iterate over the leaf lines for _, line := range leafLines { - amountDiscountsById, err := line.Discounts.Amount.GetByID() + amountDiscountsById, err := line.AmountDiscounts.GetByID() if err != nil { return nil, fmt.Errorf("failed to get amount discounts by ID: %w", err) } @@ -452,7 +452,7 @@ func sortInvoiceLines[K StripeInvoiceLineOperationParams](stripeLineAdd []*K) { // getDiscountStripeUpdateInvoiceItemParams returns the Stripe line item for a discount func getDiscountStripeUpdateInvoiceItemParams( calculator StripeCalculator, - line *billing.Line, + line billing.DetailedLine, discount billing.AmountLineDiscountManaged, stripeLine *stripe.InvoiceLineItem, ) *stripeclient.StripeInvoiceItemWithID { @@ -463,7 +463,7 @@ func getDiscountStripeUpdateInvoiceItemParams( } // getDiscountStripeInvoiceItemParams returns the Stripe line item for a discount -func getDiscountStripeInvoiceItemParams(calculator StripeCalculator, line *billing.Line, discount billing.AmountLineDiscountManaged) *stripe.InvoiceItemParams { +func getDiscountStripeInvoiceItemParams(calculator StripeCalculator, line billing.DetailedLine, discount billing.AmountLineDiscountManaged) *stripe.InvoiceItemParams { name := getDiscountLineName(line, discount) period := getPeriod(line) @@ -480,14 +480,14 @@ func getDiscountStripeInvoiceItemParams(calculator StripeCalculator, line *billi return applyTaxSettingsToInvoiceItem(addParams, line) } -func getDiscountStripeAddInvoiceItemParams(calculator StripeCalculator, line *billing.Line, discount billing.AmountLineDiscountManaged, stripeCustomerID string) *stripe.InvoiceItemParams { +func getDiscountStripeAddInvoiceItemParams(calculator StripeCalculator, line billing.DetailedLine, discount billing.AmountLineDiscountManaged, stripeCustomerID string) *stripe.InvoiceItemParams { params := getDiscountStripeInvoiceItemParams(calculator, line, discount) // Customer is required for adds params.Customer = stripe.String(stripeCustomerID) return params } -func applyTaxSettingsToInvoiceItem(add *stripe.InvoiceItemParams, line *billing.Line) *stripe.InvoiceItemParams { +func applyTaxSettingsToInvoiceItem(add *stripe.InvoiceItemParams, line billing.DetailedLine) *stripe.InvoiceItemParams { if line.TaxConfig != nil && !lo.IsEmpty(line.TaxConfig) { if line.TaxConfig.Behavior != nil { add.TaxBehavior = getStripeTaxBehavior(line.TaxConfig.Behavior) @@ -504,7 +504,7 @@ func applyTaxSettingsToInvoiceItem(add *stripe.InvoiceItemParams, line *billing. // getStripeUpdateInvoiceItemParams returns the Stripe update line params func getStripeUpdateInvoiceItemParams( calculator StripeCalculator, - line *billing.Line, + line billing.DetailedLine, stripeLine *stripe.InvoiceLineItem, ) *stripeclient.StripeInvoiceItemWithID { return &stripeclient.StripeInvoiceItemWithID{ @@ -514,7 +514,7 @@ func getStripeUpdateInvoiceItemParams( } // getStripeAddLinesLineParams returns the Stripe line item -func getStripeInvoiceItemParams(line *billing.Line, calculator StripeCalculator) *stripe.InvoiceItemParams { +func getStripeInvoiceItemParams(line billing.DetailedLine, calculator StripeCalculator) *stripe.InvoiceItemParams { description := getLineName(line) period := getPeriod(line) amount := line.Totals.Amount @@ -551,14 +551,14 @@ func getStripeInvoiceItemParams(line *billing.Line, calculator StripeCalculator) } // getStripeAddInvoiceItemParams returns the Stripe line item -func getStripeAddInvoiceItemParams(line *billing.Line, calculator StripeCalculator, stripeCustomerID string) *stripe.InvoiceItemParams { +func getStripeAddInvoiceItemParams(line billing.DetailedLine, calculator StripeCalculator, stripeCustomerID string) *stripe.InvoiceItemParams { params := getStripeInvoiceItemParams(line, calculator) params.Customer = stripe.String(stripeCustomerID) return params } // getPeriod returns the period -func getPeriod(line *billing.Line) *stripe.InvoiceItemPeriodParams { +func getPeriod(line billing.DetailedLine) *stripe.InvoiceItemPeriodParams { return &stripe.InvoiceItemPeriodParams{ Start: lo.ToPtr(line.Period.Start.Unix()), End: lo.ToPtr(line.Period.End.Unix()), @@ -566,7 +566,7 @@ func getPeriod(line *billing.Line) *stripe.InvoiceItemPeriodParams { } // getDiscountLineName returns the line name -func getDiscountLineName(line *billing.Line, discount billing.AmountLineDiscountManaged) string { +func getDiscountLineName(line billing.DetailedLine, discount billing.AmountLineDiscountManaged) string { name := line.Name if discount.Description != nil { name = fmt.Sprintf("%s (%s)", name, *discount.Description) @@ -576,7 +576,7 @@ func getDiscountLineName(line *billing.Line, discount billing.AmountLineDiscount } // getLineName returns the line name -func getLineName(line *billing.Line) string { +func getLineName(line billing.DetailedLine) string { name := line.Name if line.Description != nil { name = fmt.Sprintf("%s (%s)", name, *line.Description) diff --git a/openmeter/billing/adapter/invoicelinediff.go b/openmeter/billing/adapter/invoicelinediff.go index 01ef2b28e9..6b703ebdba 100644 --- a/openmeter/billing/adapter/invoicelinediff.go +++ b/openmeter/billing/adapter/invoicelinediff.go @@ -1,113 +1,30 @@ package billingadapter import ( - "errors" "fmt" "github.com/samber/lo" "github.com/openmeterio/openmeter/openmeter/billing" + "github.com/openmeterio/openmeter/pkg/entitydiff" "github.com/openmeterio/openmeter/pkg/set" ) -// TODO[later]: Add support for setting deletedAt - -type operation string - -const ( - operationCreate operation = "create" - operationUpdate operation = "update" - operationDelete operation = "delete" -) - -type diff[T any] struct { - ToDelete []T - ToUpdate []T - ToCreate []T -} - -func (d *diff[T]) NeedsUpdate(item ...T) { - d.ToUpdate = append(d.ToUpdate, item...) -} - -func (d *diff[T]) NeedsCreate(item ...T) { - d.ToCreate = append(d.ToCreate, item...) -} - -func (d *diff[T]) NeedsDelete(item ...T) { - d.ToDelete = append(d.ToDelete, item...) -} - -func unionOfDiffs[T any](a, b diff[T]) diff[T] { - out := diff[T]{ - ToDelete: make([]T, 0, len(a.ToDelete)+len(b.ToDelete)), - ToUpdate: make([]T, 0, len(a.ToUpdate)+len(b.ToUpdate)), - ToCreate: make([]T, 0, len(a.ToCreate)+len(b.ToCreate)), - } - - out.ToDelete = append(out.ToDelete, a.ToDelete...) - out.ToDelete = append(out.ToDelete, b.ToDelete...) - - out.ToUpdate = append(out.ToUpdate, a.ToUpdate...) - out.ToUpdate = append(out.ToUpdate, b.ToUpdate...) - - out.ToCreate = append(out.ToCreate, a.ToCreate...) - out.ToCreate = append(out.ToCreate, b.ToCreate...) - - return out -} - -func (d *diff[T]) IsEmpty() bool { - return len(d.ToDelete) == 0 && len(d.ToUpdate) == 0 && len(d.ToCreate) == 0 -} - -type entityParent interface { - // Get the ID of the parent entity - GetID() string - // Get the parent ID of the parent (if available) - GetParentID() (string, bool) -} - -func getIDAndParentID(e entityParent) []string { - out := make([]string, 0, 2) - - if e.GetID() != "" { - out = append(out, e.GetID()) - } - - if parentID, ok := e.GetParentID(); ok { - out = append(out, parentID) - } - - return out -} - -func getParentIDAsSlice(e entityParent) []string { - if parentID, ok := e.GetParentID(); ok { - return []string{parentID} - } - - return nil -} - -type withParent[T any, P entityParent] struct { - Entity T - Parent P -} - type ( - usageLineDiscountManagedWithLine = withParent[billing.UsageLineDiscountManaged, *billing.Line] - amountLineDiscountManagedWithLine = withParent[billing.AmountLineDiscountManaged, *billing.Line] + usageLineDiscountManagedWithLine = entitydiff.EqualerWithParent[billing.UsageLineDiscountManaged, *billing.Line] + amountLineDiscountManagedWithLine = entitydiff.EqualerWithParent[billing.AmountLineDiscountManaged, *billing.Line] + + detailedLineWithParent = entitydiff.WithParent[*billing.DetailedLine, *billing.Line] + detailedLineAmountDiscountWithParent = entitydiff.EqualerWithParent[billing.AmountLineDiscountManaged, *billing.DetailedLine] + detailedLineDiff = entitydiff.Diff[detailedLineWithParent] ) type invoiceLineDiff struct { - LineBase diff[*billing.Line] - FlatFee diff[*billing.Line] - UsageBased diff[*billing.Line] + Line entitydiff.Diff[*billing.Line] // Dependant entities - UsageDiscounts diff[usageLineDiscountManagedWithLine] - AmountDiscounts diff[amountLineDiscountManagedWithLine] + UsageDiscounts entitydiff.Diff[usageLineDiscountManagedWithLine] + AmountDiscounts entitydiff.Diff[amountLineDiscountManagedWithLine] // AffectedLineIDs contains the list of line IDs that are affected by the diff, even if they // are not updated. We can use this to update the UpdatedAt of the lines if any of the dependant @@ -117,242 +34,147 @@ type invoiceLineDiff struct { // ChildrenDiff contains the diff for the children of the line, we need to make this two-staged // as first we need to make sure that the parent line IDs of the children are correct, and then // we can update the children themselves. - ChildrenDiff *invoiceLineDiff -} -func (d *invoiceLineDiff) NeedsCreate(item ...*billing.Line) { - d.LineBase.NeedsCreate(item...) - switch item[0].Type { - case billing.InvoiceLineTypeFee: - d.FlatFee.NeedsCreate(item...) - case billing.InvoiceLineTypeUsageBased: - d.UsageBased.NeedsCreate(item...) - } + DetailedLine detailedLineDiff + DetailedLineAmountDiscounts entitydiff.Diff[detailedLineAmountDiscountWithParent] + DetailedLineAffectedLineIDs *set.Set[string] } -func diffInvoiceLines(lines []*billing.Line) (*invoiceLineDiff, error) { - var outErr error +func diffInvoiceLines(lines []*billing.Line) (invoiceLineDiff, error) { diff := invoiceLineDiff{ - AffectedLineIDs: set.New[string](), - ChildrenDiff: &invoiceLineDiff{ - AffectedLineIDs: set.New[string](), - }, - } - - workItems := lo.Map(lines, func(l *billing.Line, _ int) *billing.Line { - return l - }) - - remaining := make([]*billing.Line, 0, len(lines)) - - // childUpdates contain the list of lines for which we would need to validate if we - // need to update the children - childUpdates := make([]*billing.Line, 0, len(lines)) - - // Let's try to match items by ID first and figure out what we need to be updated - for _, workItem := range workItems { - if workItem.DBState != nil { - if err := diffLineBaseEntities(workItem, &diff); err != nil { - outErr = errors.Join(outErr, err) - continue - } - - childUpdates = append(childUpdates, workItem) - continue - } - - remaining = append(remaining, workItem) + AffectedLineIDs: set.New[string](), + DetailedLineAffectedLineIDs: set.New[string](), } - // Items without a DBState are new items => let's create them - for _, workItem := range remaining { - diff.LineBase.NeedsCreate(workItem) - switch workItem.Type { - case billing.InvoiceLineTypeFee: - diff.FlatFee.NeedsCreate(workItem) - case billing.InvoiceLineTypeUsageBased: - diff.UsageBased.NeedsCreate(workItem) - } - - if err := handleLineDependantEntities(workItem, operationCreate, &diff); err != nil { - outErr = errors.Join(outErr, err) - } - - // Any child of a new item is also new => let's create them - for _, child := range workItem.Children { - diff.ChildrenDiff.LineBase.NeedsCreate(child) - switch child.Type { - case billing.InvoiceLineTypeFee: - diff.ChildrenDiff.FlatFee.NeedsCreate(child) - case billing.InvoiceLineTypeUsageBased: - diff.ChildrenDiff.UsageBased.NeedsCreate(child) - } - - if err := handleLineDependantEntities(child, operationCreate, diff.ChildrenDiff); err != nil { - outErr = errors.Join(outErr, fmt.Errorf("handling children entries: %w", err)) - } - } - } - - // Let's figure out what we need to do about child lines - for _, childUpdate := range childUpdates { - // If the children are not present, we don't need to do anything (a.k.a. do not touch) - if len(childUpdate.Children) == 0 { - continue - } - - if err := getChildrenActions( - childUpdate.DBState.Children, - childUpdate.Children, - diff.ChildrenDiff, - ); err != nil { - outErr = errors.Join(outErr, err) + // For now we are handling the dbState on a per line basis so that we don't have to make operations + // against the invoice itself. Going forward we can consider moving this to the invoice level, as this + // only makes sense for gathering invoices. + dbState := []*billing.Line{} + for _, line := range lines { + if line.DBState != nil { + dbState = append(dbState, line.DBState) } } - if outErr != nil { - return nil, outErr - } - - diff.AffectedLineIDs = set.Subtract( - set.Union(diff.AffectedLineIDs, diff.ChildrenDiff.AffectedLineIDs), - lineIDsAsSet(diff.LineBase.ToUpdate), - lineIDsAsSet(diff.ChildrenDiff.LineBase.ToUpdate), - - lineIDsAsSet(diff.LineBase.ToDelete), - lineIDsAsSet(diff.ChildrenDiff.LineBase.ToDelete), - ) - - // Let's make sure we are not leaking any in-progress calculation details - diff.ChildrenDiff.AffectedLineIDs = nil - diff.ChildrenDiff.ChildrenDiff = nil - - return &diff, nil -} - -func lineIDsAsSet(lines []*billing.Line) *set.Set[string] { - return set.New(lo.Map(lines, func(l *billing.Line, _ int) string { - return l.ID - })...) -} - -func diffLineBaseEntities(line *billing.Line, out *invoiceLineDiff) error { - if line.DBState.ID == "" { - // This should not happen, as we fill the DBState after the DB fetch, it's more - // like a safeguard against future changes/manual DB state manipulation - return errors.New("line: db ID cannot be empty") - } - - if line.ID != line.DBState.ID { - return fmt.Errorf("line[%s]: id change is not allowed", line.ID) - } - - baseNeedsUpdate := false - if !line.DBState.LineBase.Equal(line.LineBase) { - switch { - case (line.DBState.LineBase.DeletedAt == nil) && (line.LineBase.DeletedAt != nil): - // The line got deleted - out.LineBase.NeedsDelete(line) - out.AffectedLineIDs.Add(getParentIDAsSlice(line)...) - - // We need to delete the children as well - if err := deleteLineChildren(line, out); err != nil { - return err + // Handle top level line diffs + err := entitydiff.DiffByID(entitydiff.DiffByIDInput[*billing.Line]{ + DBState: dbState, + ExpectedState: lines, + HandleDelete: diff.DeleteLine, + HandleCreate: diff.CreateLine, + HandleUpdate: func(item entitydiff.DiffUpdate[*billing.Line]) error { + if !item.ExpectedState.LineBase.Equal(item.DBState.LineBase) || !item.ExpectedState.UsageBased.Equal(item.DBState.UsageBased) { + diff.Line.NeedsUpdate(item) } - if err := handleLineDependantEntities(line, operationDelete, out); err != nil { + // Dependant entities + + diff.UsageDiscounts = diff.UsageDiscounts.Append(entitydiff.DiffByIDEqualer( + entitydiff.NewEqualersWithParent(item.ExpectedState.Discounts.Usage, item.ExpectedState), + entitydiff.NewEqualersWithParent(item.DBState.Discounts.Usage, item.DBState), + )) + + diff.AmountDiscounts = diff.AmountDiscounts.Append(entitydiff.DiffByIDEqualer( + entitydiff.NewEqualersWithParent(item.ExpectedState.Discounts.Amount, item.ExpectedState), + entitydiff.NewEqualersWithParent(item.DBState.Discounts.Amount, item.DBState), + )) + + // Detailed line diffs + err := entitydiff.DiffByID(entitydiff.DiffByIDInput[*billing.DetailedLine]{ + DBState: lo.Map(item.DBState.Children, func(_ billing.DetailedLine, idx int) *billing.DetailedLine { + return &item.DBState.Children[idx] + }), + ExpectedState: lo.Map(item.ExpectedState.Children, func(_ billing.DetailedLine, idx int) *billing.DetailedLine { + return &item.ExpectedState.Children[idx] + }), + HandleDelete: func(detailedLine *billing.DetailedLine) error { + if !item.DBState.IsDeleted() { + diff.AffectedLineIDs.Add(item.DBState.GetID()) + } + + return diff.DeleteDetailedLine(detailedLine, item.DBState) + }, + HandleCreate: func(detailedLine *billing.DetailedLine) error { + return diff.CreateDetailedLine(detailedLine, item.ExpectedState) + }, + HandleUpdate: func(detailedLine entitydiff.DiffUpdate[*billing.DetailedLine]) error { + if detailedLine.ExpectedState == nil { + return fmt.Errorf("detailed line expected state is nil or flat fee is nil") + } + + if detailedLine.DBState == nil { + return fmt.Errorf("detailed line db state is nil or flat fee is nil") + } + + if !detailedLine.ExpectedState.LineBase.Equal(detailedLine.DBState.LineBase) || !detailedLine.ExpectedState.FlatFee.Equal(detailedLine.DBState.FlatFee) { + diff.DetailedLine.NeedsUpdate(entitydiff.DiffUpdate[detailedLineWithParent]{ + DBState: detailedLineWithParent{ + Entity: detailedLine.DBState, + Parent: item.DBState, + }, + ExpectedState: detailedLineWithParent{ + Entity: detailedLine.ExpectedState, + Parent: item.DBState, + }, + }) + + if !item.ExpectedState.IsDeleted() { + diff.AffectedLineIDs.Add(item.DBState.ID) + } + } + + discountChanges := entitydiff.DiffByIDEqualer( + entitydiff.NewEqualersWithParent(detailedLine.ExpectedState.AmountDiscounts, detailedLine.ExpectedState), + entitydiff.NewEqualersWithParent(detailedLine.DBState.AmountDiscounts, detailedLine.DBState), + ) + + diff.DetailedLineAmountDiscounts = diff.DetailedLineAmountDiscounts.Append(discountChanges) + + if !discountChanges.IsEmpty() { + if !item.ExpectedState.IsDeleted() { + diff.AffectedLineIDs.Add(item.DBState.ID) + } + + if !detailedLine.ExpectedState.IsDeleted() { + diff.DetailedLineAffectedLineIDs.Add(detailedLine.DBState.ID) + } + } + + return nil + }, + }) + if err != nil { return err } return nil - case (line.DBState.LineBase.DeletedAt != nil) && (line.LineBase.DeletedAt == nil): - // The line got undeleted - - // Warning: it's up to the caller to make sure that child objects are properly updated too - baseNeedsUpdate = true - - case line.DBState.LineBase.DeletedAt != nil && line.LineBase.DeletedAt != nil: - // The line is deleted, we don't need to update anything - return nil - default: - baseNeedsUpdate = true - } + }, + }) + if err != nil { + return diff, err } - switch line.Type { - case billing.InvoiceLineTypeFee: - if !line.DBState.FlatFee.Equal(line.FlatFee) { - // Due to quantity being stored in the base entity, we need to update the base entity - baseNeedsUpdate = true - - out.FlatFee.NeedsUpdate(line) - } - case billing.InvoiceLineTypeUsageBased: - if !line.DBState.UsageBased.Equal(line.UsageBased) { - baseNeedsUpdate = true - - out.UsageBased.NeedsUpdate(line) - } - } + return diff, nil +} - if baseNeedsUpdate { - out.LineBase.NeedsUpdate(line) +func (d *invoiceLineDiff) DeleteLine(item *billing.Line) error { + d.Line.NeedsDelete(item) - out.AffectedLineIDs.Add(getParentIDAsSlice(line)...) + for _, discount := range item.Discounts.Usage { + d.UsageDiscounts.NeedsDelete(usageLineDiscountManagedWithLine{ + Entity: discount, + Parent: item, + }) } - - return handleLineDependantEntities(line, operationUpdate, out) -} - -func getChildrenActions(dbSave []*billing.Line, current []*billing.Line, out *invoiceLineDiff) error { - currentByID := lo.GroupBy( - lo.Filter(current, func(l *billing.Line, _ int) bool { - return l.ID != "" - }), - func(l *billing.Line) string { - return l.ID + for _, discount := range item.Discounts.Amount { + d.AmountDiscounts.NeedsDelete(amountLineDiscountManagedWithLine{ + Entity: discount, + Parent: item, }) - - for _, dbLine := range dbSave { - if _, ok := currentByID[dbLine.ID]; !ok { - // We don't have this line in the current list, so we need to delete it - // from the DB - out.LineBase.NeedsDelete(dbLine) - if err := handleLineDependantEntities(dbLine, operationDelete, out); err != nil { - return err - } - - // Deleting a child is considered an update for the parent - out.AffectedLineIDs.Add(getParentIDAsSlice(dbLine)...) - } } - dbSaveByID := lo.GroupBy(dbSave, func(l *billing.Line) string { - return l.ID - }) - - for _, currentLine := range current { - if currentLine.ID == "" { - // We don't have an ID for this line, so we need to create it - out.NeedsCreate(currentLine) - if err := handleLineDependantEntities(currentLine, operationCreate, out); err != nil { - return err - } - - // Adding a child is considered an update for the parent even if the db line of parent has not changed - out.AffectedLineIDs.Add(getParentIDAsSlice(currentLine)...) - continue - } - - dbLine, ok := dbSaveByID[currentLine.ID] - if !ok { - // Maybe we have a fake ID, let's throw an error - return fmt.Errorf("line[%s]: not found in DB", currentLine.ID) - } - - currentLine.DBState = dbLine[0] - - if err := diffLineBaseEntities(currentLine, out); err != nil { + for idx := range item.Children { + if err := d.DeleteDetailedLine(&item.Children[idx], item); err != nil { return err } } @@ -360,144 +182,92 @@ func getChildrenActions(dbSave []*billing.Line, current []*billing.Line, out *in return nil } -func deleteLineChildren(line *billing.Line, out *invoiceLineDiff) error { - for _, child := range line.DBState.Children { - out.ChildrenDiff.LineBase.NeedsDelete(child) +func (d *invoiceLineDiff) CreateLine(item *billing.Line) error { + d.Line.NeedsCreate(item) - if err := handleLineDependantEntities(child, operationDelete, out.ChildrenDiff); err != nil { - return err - } - - out.ChildrenDiff.AffectedLineIDs.Add(getParentIDAsSlice(child)...) + for _, usageDiscount := range item.Discounts.Usage { + d.UsageDiscounts.NeedsCreate(usageLineDiscountManagedWithLine{ + Entity: usageDiscount, + Parent: item, + }) } - - return nil -} - -func handleLineDependantEntities(line *billing.Line, lineOperation operation, out *invoiceLineDiff) error { - // If we don't have a DB state, we need to have an empty dbState to compare to - dbStateDiscounts := billing.LineDiscounts{} - if line.DBState != nil { - dbStateDiscounts = line.DBState.Discounts + for _, amountDiscount := range item.Discounts.Amount { + d.AmountDiscounts.NeedsCreate(amountLineDiscountManagedWithLine{ + Entity: amountDiscount, + Parent: item, + }) } - // Usage discounts - usageDiscountDiff, err := handleLineDiscounts(line.Discounts.Usage, dbStateDiscounts.Usage, lineOperation, line) - if err != nil { - return err - } + for idx := range item.Children { + child := &item.Children[idx] - out.AffectedLineIDs.Add(usageDiscountDiff.affectedLineIDs...) - out.UsageDiscounts = unionOfDiffs(out.UsageDiscounts, usageDiscountDiff.diff) + d.DetailedLine.NeedsCreate(detailedLineWithParent{ + Entity: child, + Parent: item, + }) - // Amount discounts - amountDiscountDiff, err := handleLineDiscounts(line.Discounts.Amount, dbStateDiscounts.Amount, lineOperation, line) - if err != nil { - return err + for _, discount := range child.AmountDiscounts { + d.DetailedLineAmountDiscounts.NeedsCreate(detailedLineAmountDiscountWithParent{ + Entity: discount, + Parent: child, + }) + } } - out.AffectedLineIDs.Add(amountDiscountDiff.affectedLineIDs...) - out.AmountDiscounts = unionOfDiffs(out.AmountDiscounts, amountDiscountDiff.diff) - return nil } -type diffable[T any] interface { - GetID() string - ContentsEqual(other T) bool -} - -type handleLineDiscountsResult[T diffable[T], P entityParent] struct { - diff diff[withParent[T, P]] - affectedLineIDs []string -} - -func handleLineDiscounts[T diffable[T], P entityParent](items []T, dbItems []T, lineOperation operation, parentLine P) (handleLineDiscountsResult[T, P], error) { - out := handleLineDiscountsResult[T, P]{ - diff: diff[withParent[T, P]]{}, - } - - switch lineOperation { - case operationCreate: - for _, discount := range items { - out.diff.NeedsCreate(withParent[T, P]{ - Entity: discount, - Parent: parentLine, - }) - } - case operationDelete: - for _, discount := range items { - out.diff.NeedsDelete(withParent[T, P]{ - Entity: discount, - Parent: parentLine, - }) - } - case operationUpdate: - updateDiffs, err := handleLineDiscountUpdate(items, dbItems, parentLine) - if err != nil { - return out, err - } +func (d *invoiceLineDiff) DeleteDetailedLine(item *billing.DetailedLine, parent *billing.Line) error { + d.DetailedLine.NeedsDelete(detailedLineWithParent{ + Entity: item, + Parent: parent, + }) - out.diff = updateDiffs - if !updateDiffs.IsEmpty() { - out.affectedLineIDs = getIDAndParentID(parentLine) - } + for _, discount := range item.AmountDiscounts { + d.DetailedLineAmountDiscounts.NeedsDelete(detailedLineAmountDiscountWithParent{ + Entity: discount, + Parent: item, + }) } - return out, nil + return nil } -func handleLineDiscountUpdate[T diffable[T], P entityParent](items []T, dbItems []T, line P) (diff[withParent[T, P]], error) { - out := diff[withParent[T, P]]{} - - // We need to figure out what we need to update - currentDiscountIDs := map[string]T{} - for _, discount := range items { - if discount.GetID() == "" { - continue - } - - currentDiscountIDs[discount.GetID()] = discount - } +func (d *invoiceLineDiff) CreateDetailedLine(item *billing.DetailedLine, parent *billing.Line) error { + d.DetailedLine.NeedsCreate(detailedLineWithParent{ + Entity: item, + Parent: parent, + }) - dbDiscountIDs := map[string]T{} - for _, discount := range dbItems { - dbDiscountIDs[discount.GetID()] = discount + for _, discount := range item.AmountDiscounts { + d.DetailedLineAmountDiscounts.NeedsCreate(detailedLineAmountDiscountWithParent{ + Entity: discount, + Parent: item, + }) } - for _, dbDiscount := range dbDiscountIDs { - if _, ok := currentDiscountIDs[dbDiscount.GetID()]; !ok { - // We need to delete this discount - out.NeedsDelete(withParent[T, P]{ - Entity: dbDiscount, - Parent: line, - }) - } - } + return nil +} - for _, currentDiscount := range items { - if currentDiscount.GetID() == "" { - // We need to create this discount - out.NeedsCreate(withParent[T, P]{ - Entity: currentDiscount, - Parent: line, - }) +func (d *invoiceLineDiff) GetDetailedLineDiffWithParentID() entitydiff.Diff[*billing.DetailedLine] { + return entitydiff.Diff[*billing.DetailedLine]{ + Create: lo.Map(d.DetailedLine.Create, func(item detailedLineWithParent, _ int) *billing.DetailedLine { + item.Entity.ParentLineID = lo.ToPtr(item.Parent.GetID()) - continue - } + return item.Entity + }), + Delete: lo.Map(d.DetailedLine.Delete, func(item detailedLineWithParent, _ int) *billing.DetailedLine { + item.Entity.ParentLineID = lo.ToPtr(item.Parent.GetID()) - dbDiscount, ok := dbDiscountIDs[currentDiscount.GetID()] - if !ok { - return out, fmt.Errorf("discount[%s]: not found in DB", currentDiscount.GetID()) - } + return item.Entity + }), + Update: lo.Map(d.DetailedLine.Update, func(item entitydiff.DiffUpdate[detailedLineWithParent], _ int) entitydiff.DiffUpdate[*billing.DetailedLine] { + item.ExpectedState.Entity.ParentLineID = lo.ToPtr(item.ExpectedState.Parent.GetID()) - if !dbDiscount.ContentsEqual(currentDiscount) { - out.NeedsUpdate(withParent[T, P]{ - Entity: currentDiscount, - Parent: line, - }) - } + return entitydiff.DiffUpdate[*billing.DetailedLine]{ + DBState: item.DBState.Entity, + ExpectedState: item.ExpectedState.Entity, + } + }), } - - return out, nil } diff --git a/openmeter/billing/adapter/invoicelinediff_test.go b/openmeter/billing/adapter/invoicelinediff_test.go index c4f601ea5d..5ab26d281c 100644 --- a/openmeter/billing/adapter/invoicelinediff_test.go +++ b/openmeter/billing/adapter/invoicelinediff_test.go @@ -10,20 +10,26 @@ import ( "github.com/openmeterio/openmeter/openmeter/billing" "github.com/openmeterio/openmeter/pkg/clock" + "github.com/openmeterio/openmeter/pkg/entitydiff" "github.com/openmeterio/openmeter/pkg/models" ) -type idDiff = diff[string] +type idDiff struct { + ToCreate []string + ToUpdate []string + ToDelete []string +} type lineDiffExpectation struct { - LineBase idDiff - FlatFee idDiff - UsageBased idDiff + Line idDiff AmountDiscounts idDiff - AffectedLineIDs []string - ChildrenDiff *lineDiffExpectation + DetailedLine idDiff + DetailedLineAmountDiscounts idDiff + + AffectedLineIDs []string + DetailedLineAffectedLineIDs []string } func TestInvoiceLineDiffing(t *testing.T) { @@ -33,37 +39,33 @@ func TestInvoiceLineDiffing(t *testing.T) { ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ ID: "1", }), - Type: billing.InvoiceLineTypeFee, }, - FlatFee: &billing.FlatFeeLine{}, + UsageBased: billing.UsageBasedLine{}, }, { LineBase: billing.LineBase{ ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ ID: "2", }), - Type: billing.InvoiceLineTypeUsageBased, }, - UsageBased: &billing.UsageBasedLine{}, - Children: billing.NewLineChildren([]*billing.Line{ + UsageBased: billing.UsageBasedLine{}, + Children: billing.NewLineChildren([]billing.DetailedLine{ { LineBase: billing.LineBase{ ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ ID: "2.1", }), - Type: billing.InvoiceLineTypeFee, }, - FlatFee: &billing.FlatFeeLine{}, - Discounts: newAmountDiscountsWithIDs("D2.1.1"), + FlatFee: billing.FlatFeeLine{}, + AmountDiscounts: newAmountDiscountsWithIDs("D2.1.1"), }, { LineBase: billing.LineBase{ ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ ID: "2.2", }), - Type: billing.InvoiceLineTypeFee, }, - FlatFee: &billing.FlatFeeLine{}, + FlatFee: billing.FlatFeeLine{}, }, }), }, @@ -76,25 +78,14 @@ func TestInvoiceLineDiffing(t *testing.T) { require.NoError(t, err) requireDiff(t, lineDiffExpectation{ - LineBase: idDiff{ + Line: idDiff{ ToCreate: []string{"1", "2"}, }, - FlatFee: idDiff{ - ToCreate: []string{"1"}, - }, - UsageBased: idDiff{ - ToCreate: []string{"2"}, + DetailedLine: idDiff{ + ToCreate: []string{"2.1", "2.2"}, }, - ChildrenDiff: &lineDiffExpectation{ - LineBase: idDiff{ - ToCreate: []string{"2.1", "2.2"}, - }, - FlatFee: idDiff{ - ToCreate: []string{"2.1", "2.2"}, - }, - AmountDiscounts: idDiff{ - ToCreate: []string{"D2.1.1"}, - }, + DetailedLineAmountDiscounts: idDiff{ + ToCreate: []string{"D2.1.1"}, }, }, lineDiff) }) @@ -120,16 +111,11 @@ func TestInvoiceLineDiffing(t *testing.T) { requireDiff(t, lineDiffExpectation{ AffectedLineIDs: []string{"2"}, - ChildrenDiff: &lineDiffExpectation{ - LineBase: idDiff{ - ToDelete: []string{"2.1"}, - }, - // Flat fee is not deleted as it does not have soft delete, so it's enough to mark the line as deleted - FlatFee: idDiff{}, - AmountDiscounts: idDiff{ - // Discounts also get deleted - ToDelete: []string{"D2.1.1"}, - }, + DetailedLine: idDiff{ + ToDelete: []string{"2.1"}, + }, + DetailedLineAmountDiscounts: idDiff{ + ToDelete: []string{"D2.1.1"}, }, }, lineDiff) }) @@ -145,13 +131,8 @@ func TestInvoiceLineDiffing(t *testing.T) { requireDiff(t, lineDiffExpectation{ AffectedLineIDs: []string{"2"}, - ChildrenDiff: &lineDiffExpectation{ - LineBase: idDiff{ - ToUpdate: []string{"2.1"}, - }, - FlatFee: idDiff{ - ToUpdate: []string{"2.1"}, - }, + DetailedLine: idDiff{ + ToUpdate: []string{"2.1"}, }, }, lineDiff) }) @@ -166,10 +147,7 @@ func TestInvoiceLineDiffing(t *testing.T) { require.NoError(t, err) requireDiff(t, lineDiffExpectation{ - LineBase: idDiff{ - ToUpdate: []string{"2"}, - }, - UsageBased: idDiff{ + Line: idDiff{ ToUpdate: []string{"2"}, }, }, lineDiff) @@ -191,19 +169,14 @@ func TestInvoiceLineDiffing(t *testing.T) { requireDiff(t, lineDiffExpectation{ AffectedLineIDs: []string{"2"}, - ChildrenDiff: &lineDiffExpectation{ - LineBase: idDiff{ - ToDelete: []string{"2.1"}, - ToCreate: []string{"2.3"}, - }, - FlatFee: idDiff{ - ToCreate: []string{"2.3"}, - }, - AmountDiscounts: idDiff{ - // The discount gets deleted + created - ToCreate: []string{"D2.1.3"}, - ToDelete: []string{"D2.1.1"}, - }, + DetailedLine: idDiff{ + ToDelete: []string{"2.1"}, + ToCreate: []string{"2.3"}, + }, + DetailedLineAmountDiscounts: idDiff{ + // The discount gets deleted + created + ToCreate: []string{"D2.1.3"}, + ToDelete: []string{"D2.1.1"}, }, }, lineDiff) }) @@ -219,11 +192,10 @@ func TestInvoiceLineDiffing(t *testing.T) { require.NoError(t, err) requireDiff(t, lineDiffExpectation{ - AffectedLineIDs: []string{"2", "2.1"}, - ChildrenDiff: &lineDiffExpectation{ - AmountDiscounts: idDiff{ - ToDelete: []string{"D2.1.1"}, - }, + AffectedLineIDs: []string{"2"}, + DetailedLineAffectedLineIDs: []string{"2.1"}, + DetailedLineAmountDiscounts: idDiff{ + ToDelete: []string{"D2.1.1"}, }, }, lineDiff) }) @@ -238,11 +210,10 @@ func TestInvoiceLineDiffing(t *testing.T) { require.NoError(t, err) requireDiff(t, lineDiffExpectation{ - AffectedLineIDs: []string{"2", "2.1"}, - ChildrenDiff: &lineDiffExpectation{ - AmountDiscounts: idDiff{ - ToUpdate: []string{"D2.1.1"}, - }, + AffectedLineIDs: []string{"2"}, + DetailedLineAffectedLineIDs: []string{"2.1"}, + DetailedLineAmountDiscounts: idDiff{ + ToUpdate: []string{"D2.1.1"}, }, }, lineDiff) }) @@ -260,12 +231,11 @@ func TestInvoiceLineDiffing(t *testing.T) { require.NoError(t, err) requireDiff(t, lineDiffExpectation{ - AffectedLineIDs: []string{"2", "2.1"}, - ChildrenDiff: &lineDiffExpectation{ - AmountDiscounts: idDiff{ - ToCreate: []string{"D2.1.2"}, - ToDelete: []string{"D2.1.1"}, - }, + AffectedLineIDs: []string{"2"}, + DetailedLineAffectedLineIDs: []string{"2.1"}, + DetailedLineAmountDiscounts: idDiff{ + ToCreate: []string{"D2.1.2"}, + ToDelete: []string{"D2.1.1"}, }, }, lineDiff) }) @@ -282,13 +252,11 @@ func TestInvoiceLineDiffing(t *testing.T) { requireDiff(t, lineDiffExpectation{ AffectedLineIDs: []string{"2"}, - ChildrenDiff: &lineDiffExpectation{ - LineBase: idDiff{ - ToDelete: []string{"2.1"}, - }, - AmountDiscounts: idDiff{ - ToDelete: []string{"D2.1.1"}, - }, + DetailedLine: idDiff{ + ToDelete: []string{"2.1"}, + }, + DetailedLineAmountDiscounts: idDiff{ + ToDelete: []string{"D2.1.1"}, }, }, lineDiff) }) @@ -303,16 +271,14 @@ func TestInvoiceLineDiffing(t *testing.T) { require.NoError(t, err) requireDiff(t, lineDiffExpectation{ - LineBase: idDiff{ + Line: idDiff{ ToDelete: []string{"2"}, }, - ChildrenDiff: &lineDiffExpectation{ - LineBase: idDiff{ - ToDelete: []string{"2.1", "2.2"}, - }, - AmountDiscounts: idDiff{ - ToDelete: []string{"D2.1.1"}, - }, + DetailedLine: idDiff{ + ToDelete: []string{"2.1", "2.2"}, + }, + DetailedLineAmountDiscounts: idDiff{ + ToDelete: []string{"D2.1.1"}, }, }, lineDiff) }) @@ -327,7 +293,7 @@ func TestInvoiceLineDiffing(t *testing.T) { require.NoError(t, err) requireDiff(t, lineDiffExpectation{ - LineBase: idDiff{ + Line: idDiff{ ToDelete: []string{"1"}, }, }, lineDiff) @@ -344,66 +310,19 @@ func TestInvoiceLineDiffing(t *testing.T) { requireDiff(t, lineDiffExpectation{}, lineDiff) }) - - t.Run("deleted, changed lines are not triggering updates", func(t *testing.T) { - base := cloneLines(template) - base[1].DeletedAt = lo.ToPtr(clock.Now()) - base[1].Children.GetByID("2.1").DeletedAt = lo.ToPtr(clock.Now()) - - snapshotAsDBState(base) - base[1].DeletedAt = nil - base[1].Children.GetByID("2.1").DeletedAt = nil - - lineDiff, err := diffInvoiceLines(base) - require.NoError(t, err) - - requireDiff(t, lineDiffExpectation{ - LineBase: idDiff{ - ToUpdate: []string{"2"}, - }, - ChildrenDiff: &lineDiffExpectation{ - LineBase: idDiff{ - ToUpdate: []string{"2.1"}, - }, - }, - }, lineDiff) - }) } -func mapLinesToIDs(lines []*billing.Line) []string { - return lo.Map(lines, func(line *billing.Line, _ int) string { - // Use description as ID if it's set, so that we can predict the new line's ID for new - // line testcases - if line.Description != nil { - return *line.Description - } - return line.ID - }) -} - -func mapLineDiffToIDs(in diff[*billing.Line]) idDiff { +func mapDiffToIDs[T entitydiff.Entity](in entitydiff.Diff[T], getDescription func(T) *string) idDiff { return idDiff{ - ToCreate: mapLinesToIDs(in.ToCreate), - ToUpdate: mapLinesToIDs(in.ToUpdate), - ToDelete: mapLinesToIDs(in.ToDelete), - } -} - -func mapLineDiscountsToIDs(t *testing.T, discounts []withParent[billing.AmountLineDiscountManaged, *billing.Line]) []string { - return lo.Map(discounts, func(d withParent[billing.AmountLineDiscountManaged, *billing.Line], _ int) string { - if d.Entity.Description != nil { - return *d.Entity.Description - } - - return d.Entity.GetID() - }) -} - -func mapLineDiscountDiffToIDs(t *testing.T, in diff[withParent[billing.AmountLineDiscountManaged, *billing.Line]]) idDiff { - return idDiff{ - ToCreate: mapLineDiscountsToIDs(t, in.ToCreate), - ToUpdate: mapLineDiscountsToIDs(t, in.ToUpdate), - ToDelete: mapLineDiscountsToIDs(t, in.ToDelete), + ToCreate: lo.Map(in.Create, func(item T, _ int) string { + return lo.FromPtrOr(getDescription(item), item.GetID()) + }), + ToUpdate: lo.Map(in.Update, func(item entitydiff.DiffUpdate[T], _ int) string { + return lo.FromPtrOr(getDescription(item.DBState), item.DBState.GetID()) + }), + ToDelete: lo.Map(in.Delete, func(item T, _ int) string { + return lo.FromPtrOr(getDescription(item), item.GetID()) + }), } } @@ -420,35 +339,27 @@ func msgPrefix(prefix string, in ...interface{}) []interface{} { return in } -func requireIdDiffMatches(t *testing.T, a, b idDiff, msgAndArgs ...interface{}) { +func requireIdDiffMatches[T entitydiff.Entity](t *testing.T, a idDiff, b entitydiff.Diff[T], getDescription func(T) *string, msgAndArgs ...interface{}) { t.Helper() - require.ElementsMatch(t, a.ToCreate, b.ToCreate, msgPrefix("ToCreate", msgAndArgs...)) - require.ElementsMatch(t, a.ToUpdate, b.ToUpdate, msgPrefix("ToUpdate", msgAndArgs...)) - require.ElementsMatch(t, a.ToDelete, b.ToDelete, msgPrefix("ToDelete", msgAndArgs...)) -} + idDiffB := mapDiffToIDs(b, getDescription) -func requireDiffWithoutChildren(t *testing.T, expected lineDiffExpectation, actual *invoiceLineDiff, prefix string) { - t.Helper() - - requireIdDiffMatches(t, expected.LineBase, mapLineDiffToIDs(actual.LineBase), prefix+": LineBase") - requireIdDiffMatches(t, expected.FlatFee, mapLineDiffToIDs(actual.FlatFee), prefix+": FlatFee") - requireIdDiffMatches(t, expected.UsageBased, mapLineDiffToIDs(actual.UsageBased), prefix+": UsageBased") - - requireIdDiffMatches(t, expected.AmountDiscounts, mapLineDiscountDiffToIDs(t, actual.AmountDiscounts), prefix+": AmountDiscounts") + require.ElementsMatch(t, a.ToCreate, idDiffB.ToCreate, msgPrefix("ToCreate", msgAndArgs...)) + require.ElementsMatch(t, a.ToUpdate, idDiffB.ToUpdate, msgPrefix("ToUpdate", msgAndArgs...)) + require.ElementsMatch(t, a.ToDelete, idDiffB.ToDelete, msgPrefix("ToDelete", msgAndArgs...)) } -func requireDiff(t *testing.T, expected lineDiffExpectation, actual *invoiceLineDiff) { +func requireDiff(t *testing.T, expected lineDiffExpectation, actual invoiceLineDiff) { t.Helper() - requireDiffWithoutChildren(t, expected, actual, "root diff") - require.ElementsMatch(t, expected.AffectedLineIDs, actual.AffectedLineIDs.AsSlice(), "affectedLineIDs") - childrenExpectation := expected.ChildrenDiff - if childrenExpectation == nil { - childrenExpectation = &lineDiffExpectation{} - } + requireIdDiffMatches(t, expected.Line, actual.Line, func(line *billing.Line) *string { return line.GetDescription() }, "line diff") + requireIdDiffMatches(t, expected.AmountDiscounts, actual.AmountDiscounts, func(discount amountLineDiscountManagedWithLine) *string { return discount.Entity.Description }, "amount discounts") - requireDiffWithoutChildren(t, *childrenExpectation, actual.ChildrenDiff, "children diff") + requireIdDiffMatches(t, expected.DetailedLine, actual.DetailedLine, func(line detailedLineWithParent) *string { return line.Entity.GetDescription() }, "detailed line diff") + requireIdDiffMatches(t, expected.DetailedLineAmountDiscounts, actual.DetailedLineAmountDiscounts, func(discount amountLineDiscountManagedWithLine) *string { return discount.Entity.Description }, "detailed line amount discounts") + + require.ElementsMatch(t, expected.AffectedLineIDs, actual.AffectedLineIDs.AsSlice(), "affected line IDs") + require.ElementsMatch(t, expected.DetailedLineAffectedLineIDs, actual.DetailedLineAffectedLineIDs.AsSlice(), "detailed line affected line IDs") } func cloneLines(lines []*billing.Line) []*billing.Line { @@ -477,17 +388,15 @@ func snapshotAsDBState(lines []*billing.Line) { } } -func newAmountDiscountsWithIDs(ids ...string) billing.LineDiscounts { - return billing.LineDiscounts{ - Amount: lo.Map(ids, func(id string, _ int) billing.AmountLineDiscountManaged { - return billing.AmountLineDiscountManaged{ - ManagedModelWithID: models.ManagedModelWithID{ - ID: id, - }, - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(10), - }, - } - }), - } +func newAmountDiscountsWithIDs(ids ...string) billing.AmountLineDiscountsManaged { + return lo.Map(ids, func(id string, _ int) billing.AmountLineDiscountManaged { + return billing.AmountLineDiscountManaged{ + ManagedModelWithID: models.ManagedModelWithID{ + ID: id, + }, + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(10), + }, + } + }) } diff --git a/openmeter/billing/adapter/invoicelinemapper.go b/openmeter/billing/adapter/invoicelinemapper.go index 5c549e6b78..eb2544eb7e 100644 --- a/openmeter/billing/adapter/invoicelinemapper.go +++ b/openmeter/billing/adapter/invoicelinemapper.go @@ -137,7 +137,6 @@ func (a *adapter) mapInvoiceLineWithoutReferences(dbLine *db.BillingInvoiceLine) Metadata: dbLine.Metadata, Annotations: dbLine.Annotations, InvoiceID: dbLine.InvoiceID, - Status: dbLine.Status, ManagedBy: dbLine.ManagedBy, Period: billing.Period{ @@ -151,7 +150,6 @@ func (a *adapter) mapInvoiceLineWithoutReferences(dbLine *db.BillingInvoiceLine) InvoiceAt: dbLine.InvoiceAt.In(time.UTC), - Type: dbLine.Type, Currency: dbLine.Currency, TaxConfig: lo.EmptyableToPtr(dbLine.TaxConfig), @@ -198,7 +196,7 @@ func (a *adapter) mapInvoiceLineWithoutReferences(dbLine *db.BillingInvoiceLine) if ubpLine == nil { return invoiceLine, fmt.Errorf("manual usage based line is missing") } - invoiceLine.UsageBased = &billing.UsageBasedLine{ + invoiceLine.UsageBased = billing.UsageBasedLine{ ConfigID: ubpLine.ID, FeatureKey: lo.FromPtr(ubpLine.FeatureKey), Price: ubpLine.Price, diff --git a/openmeter/billing/adapter/invoicelines.go b/openmeter/billing/adapter/invoicelines.go index 338921d12d..945733fb05 100644 --- a/openmeter/billing/adapter/invoicelines.go +++ b/openmeter/billing/adapter/invoicelines.go @@ -19,6 +19,7 @@ import ( "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoicesplitlinegroup" "github.com/openmeterio/openmeter/openmeter/ent/db/billinginvoiceusagebasedlineconfig" "github.com/openmeterio/openmeter/pkg/clock" + "github.com/openmeterio/openmeter/pkg/entitydiff" "github.com/openmeterio/openmeter/pkg/framework/entutils" "github.com/openmeterio/openmeter/pkg/slicesx" ) @@ -53,123 +54,24 @@ func (a *adapter) UpsertInvoiceLines(ctx context.Context, inputIn billing.Upsert } // Step 1: Let's create/upsert the line configs first - if err = tx.upsertFeeLineConfig(ctx, - unionOfDiffs(lineDiffs.FlatFee, lineDiffs.ChildrenDiff.FlatFee)); err != nil { + if err = tx.upsertFeeLineConfig(ctx, lineDiffs.DetailedLine); err != nil { return nil, fmt.Errorf("upserting fee line configs: %w", err) } - if err := tx.upsertUsageBasedConfig(ctx, - unionOfDiffs(lineDiffs.UsageBased, lineDiffs.ChildrenDiff.UsageBased)); err != nil { + if err := tx.upsertUsageBasedConfig(ctx, lineDiffs.Line); err != nil { return nil, fmt.Errorf("upserting usage based line configs: %w", err) } // Step 2: Let's create the lines, but not their detailed lines - lineUpsertConfig := upsertInput[*billing.Line, *db.BillingInvoiceLineCreate]{ - Create: func(tx *db.Client, line *billing.Line) (*db.BillingInvoiceLineCreate, error) { - if line.ID == "" { - line.ID = ulid.Make().String() - } - - create := tx.BillingInvoiceLine.Create(). - SetID(line.ID). - SetNamespace(line.Namespace). - SetInvoiceID(line.InvoiceID). - SetPeriodStart(line.Period.Start.In(time.UTC)). - SetPeriodEnd(line.Period.End.In(time.UTC)). - SetNillableParentLineID(line.ParentLineID). - SetNillableSplitLineGroupID(line.SplitLineGroupID). - SetNillableDeletedAt(line.DeletedAt). - SetInvoiceAt(line.InvoiceAt.In(time.UTC)). - SetStatus(line.Status). - SetManagedBy(line.ManagedBy). - SetType(line.Type). - SetName(line.Name). - SetNillableDescription(line.Description). - SetCurrency(line.Currency). - SetMetadata(line.Metadata). - SetAnnotations(line.Annotations). - SetNillableChildUniqueReferenceID(line.ChildUniqueReferenceID). - // Totals - SetAmount(line.Totals.Amount). - SetChargesTotal(line.Totals.ChargesTotal). - SetDiscountsTotal(line.Totals.DiscountsTotal). - SetTaxesTotal(line.Totals.TaxesTotal). - SetTaxesInclusiveTotal(line.Totals.TaxesInclusiveTotal). - SetTaxesExclusiveTotal(line.Totals.TaxesExclusiveTotal). - SetTotal(line.Totals.Total). - // ExternalIDs - SetNillableInvoicingAppExternalID(lo.EmptyableToPtr(line.ExternalIDs.Invoicing)) - - if line.Subscription != nil { - create = create.SetSubscriptionID(line.Subscription.SubscriptionID). - SetSubscriptionPhaseID(line.Subscription.PhaseID). - SetSubscriptionItemID(line.Subscription.ItemID). - SetSubscriptionBillingPeriodFrom(line.Subscription.BillingPeriod.From.In(time.UTC)). - SetSubscriptionBillingPeriodTo(line.Subscription.BillingPeriod.To.In(time.UTC)) - } - - if line.TaxConfig != nil { - create = create.SetTaxConfig(*line.TaxConfig) - } - - if !line.RateCardDiscounts.IsEmpty() { - create = create.SetRatecardDiscounts(lo.ToPtr(line.RateCardDiscounts)) - } - - switch line.Type { - case billing.InvoiceLineTypeFee: - create = create.SetQuantity(line.FlatFee.Quantity). - SetFlatFeeLineID(line.FlatFee.ConfigID). - SetNillableUsageBasedLineID(nil) - case billing.InvoiceLineTypeUsageBased: - create = create. - SetNillableQuantity(line.UsageBased.Quantity). - SetUsageBasedLineID(line.UsageBased.ConfigID). - SetNillableFlatFeeLineID(nil) - - default: - return nil, fmt.Errorf("unsupported type: %s", line.Type) - } - - return create, nil - }, - UpsertItems: func(ctx context.Context, tx *db.Client, items []*db.BillingInvoiceLineCreate) error { - return tx.BillingInvoiceLine. - CreateBulk(items...). - OnConflict(sql.ConflictColumns(billinginvoiceline.FieldID), - sql.ResolveWithNewValues(), - sql.ResolveWith(func(u *sql.UpdateSet) { - u.SetIgnore(billinginvoiceline.FieldCreatedAt) - })). - // TODO[OM-1416]: all nillable fileds must be listed explicitly - UpdateQuantity(). - UpdateChildUniqueReferenceID(). - Exec(ctx) - }, - MarkDeleted: func(ctx context.Context, line *billing.Line) (*billing.Line, error) { - line.DeletedAt = lo.ToPtr(clock.Now().In(time.UTC)) - return line, nil - }, - } - - if err := upsertWithOptions(ctx, tx.db, lineDiffs.LineBase, lineUpsertConfig); err != nil { + if err := tx.upsertInvoiceLines(ctx, lineDiffs.Line); err != nil { return nil, fmt.Errorf("creating lines: %w", err) } // Step 3: Let's create the detailed lines - flattenedDetailedLines := lo.FlatMap(input.Lines, func(_ *billing.Line, idx int) []*billing.Line { - return input.Lines[idx].Children - }) - - if len(flattenedDetailedLines) > 0 { - // Let's restore the parent <-> child relationship in terms of the ParentLineID field - for _, line := range input.Lines { - for _, child := range line.Children { - child.ParentLineID = lo.ToPtr(line.ID) - } - } + if !lineDiffs.DetailedLine.IsEmpty() { + detailedLineDiff := lineDiffs.GetDetailedLineDiffWithParentID() - if err := upsertWithOptions(ctx, tx.db, lineDiffs.ChildrenDiff.LineBase, lineUpsertConfig); err != nil { + if err := tx.upsertDetailedLines(ctx, detailedLineDiff); err != nil { return nil, fmt.Errorf("[children] creating lines: %w", err) } } @@ -177,9 +79,7 @@ func (a *adapter) UpsertInvoiceLines(ctx context.Context, inputIn billing.Upsert // Step 4: Let's upsert anything else, that doesn't have strict ID requirements // Step 4a: Line Discounts - - allUsageDiscountDiffs := unionOfDiffs(lineDiffs.UsageDiscounts, lineDiffs.ChildrenDiff.UsageDiscounts) - err = upsertWithOptions(ctx, tx.db, allUsageDiscountDiffs, upsertInput[usageLineDiscountManagedWithLine, *db.BillingInvoiceLineUsageDiscountCreate]{ + err = upsertWithOptions(ctx, tx.db, lineDiffs.UsageDiscounts, upsertInput[usageLineDiscountManagedWithLine, *db.BillingInvoiceLineUsageDiscountCreate]{ Create: func(tx *db.Client, d usageLineDiscountManagedWithLine) (*db.BillingInvoiceLineUsageDiscountCreate, error) { discount := d.Entity @@ -224,8 +124,7 @@ func (a *adapter) UpsertInvoiceLines(ctx context.Context, inputIn billing.Upsert return nil, fmt.Errorf("upserting usage discounts: %w", err) } - allAmountDiscountDiffs := unionOfDiffs(lineDiffs.AmountDiscounts, lineDiffs.ChildrenDiff.AmountDiscounts) - err = upsertWithOptions(ctx, tx.db, allAmountDiscountDiffs, upsertInput[amountLineDiscountManagedWithLine, *db.BillingInvoiceLineDiscountCreate]{ + err = upsertWithOptions(ctx, tx.db, lineDiffs.AmountDiscounts, upsertInput[amountLineDiscountManagedWithLine, *db.BillingInvoiceLineDiscountCreate]{ Create: func(tx *db.Client, d amountLineDiscountManagedWithLine) (*db.BillingInvoiceLineDiscountCreate, error) { discount := d.Entity @@ -270,6 +169,51 @@ func (a *adapter) UpsertInvoiceLines(ctx context.Context, inputIn billing.Upsert return nil, fmt.Errorf("upserting amount discounts: %w", err) } + err = upsertWithOptions(ctx, tx.db, lineDiffs.DetailedLineAmountDiscounts, upsertInput[detailedLineAmountDiscountWithParent, *db.BillingInvoiceLineDiscountCreate]{ + Create: func(tx *db.Client, d detailedLineAmountDiscountWithParent) (*db.BillingInvoiceLineDiscountCreate, error) { + discount := d.Entity + + if discount.ID == "" { + discount.ID = ulid.Make().String() + } + + create := tx.BillingInvoiceLineDiscount.Create(). + SetID(discount.ID). + SetNamespace(d.Parent.GetNamespace()). + SetLineID(d.Parent.GetID()). + SetReason(discount.Reason.Type()). + SetSourceDiscount(lo.ToPtr(discount.Reason)). + SetAmount(discount.Amount). + SetNillableRoundingAmount(lo.EmptyableToPtr(discount.RoundingAmount)). + SetNillableDeletedAt(discount.DeletedAt). + SetNillableChildUniqueReferenceID(discount.ChildUniqueReferenceID). + SetNillableDescription(discount.Description). + // ExternalIDs + SetNillableInvoicingAppExternalID(lo.EmptyableToPtr(discount.ExternalIDs.Invoicing)) + + return create, nil + }, + UpsertItems: func(ctx context.Context, tx *db.Client, items []*db.BillingInvoiceLineDiscountCreate) error { + return tx.BillingInvoiceLineDiscount. + CreateBulk(items...). + OnConflict( + sql.ConflictColumns(billinginvoicelinediscount.FieldID), + sql.ResolveWithNewValues(), + sql.ResolveWith(func(u *sql.UpdateSet) { + u.SetIgnore(billinginvoicelinediscount.FieldCreatedAt) + }), + ).Exec(ctx) + }, + MarkDeleted: func(ctx context.Context, d detailedLineAmountDiscountWithParent) (detailedLineAmountDiscountWithParent, error) { + d.Entity.DeletedAt = lo.ToPtr(clock.Now().In(time.UTC)) + + return d, nil + }, + }) + if err != nil { + return nil, fmt.Errorf("upserting amount discounts: %w", err) + } + // Step 4b: Taxes (TODO[later]: implement) // Step 5: Update updated_at for all the affected lines @@ -290,9 +234,11 @@ func (a *adapter) UpsertInvoiceLines(ctx context.Context, inputIn billing.Upsert }) } -func (a *adapter) upsertFeeLineConfig(ctx context.Context, in diff[*billing.Line]) error { - return upsertWithOptions(ctx, a.db, in, upsertInput[*billing.Line, *db.BillingInvoiceFlatFeeLineConfigCreate]{ - Create: func(tx *db.Client, line *billing.Line) (*db.BillingInvoiceFlatFeeLineConfigCreate, error) { +func (a *adapter) upsertFeeLineConfig(ctx context.Context, in detailedLineDiff) error { + return upsertWithOptions(ctx, a.db, in, upsertInput[detailedLineWithParent, *db.BillingInvoiceFlatFeeLineConfigCreate]{ + Create: func(tx *db.Client, lineWithParent detailedLineWithParent) (*db.BillingInvoiceFlatFeeLineConfigCreate, error) { + line := lineWithParent.Entity + if line.FlatFee.ConfigID == "" { line.FlatFee.ConfigID = ulid.Make().String() } @@ -302,13 +248,8 @@ func (a *adapter) upsertFeeLineConfig(ctx context.Context, in diff[*billing.Line SetPerUnitAmount(line.FlatFee.PerUnitAmount). SetCategory(line.FlatFee.Category). SetPaymentTerm(line.FlatFee.PaymentTerm). - SetID(line.FlatFee.ConfigID) - - if line.Status == billing.InvoiceLineStatusDetailed { - // TODO[later]: Detailed lines must be a separate entity, so that we don't need these hacks (like line config or type specific sets) - create = create.SetNillableIndex(line.FlatFee.Index) - } - + SetID(line.FlatFee.ConfigID). + SetNillableIndex(line.FlatFee.Index) return create, nil }, UpsertItems: func(ctx context.Context, tx *db.Client, items []*db.BillingInvoiceFlatFeeLineConfigCreate) error { @@ -317,12 +258,14 @@ func (a *adapter) upsertFeeLineConfig(ctx context.Context, in diff[*billing.Line OnConflict( sql.ConflictColumns(billinginvoiceflatfeelineconfig.FieldID), sql.ResolveWithNewValues(), - ).Exec(ctx) + ). + UpdateIndex(). + Exec(ctx) }, }) } -func (a *adapter) upsertUsageBasedConfig(ctx context.Context, lineDiffs diff[*billing.Line]) error { +func (a *adapter) upsertUsageBasedConfig(ctx context.Context, lineDiffs entitydiff.Diff[*billing.Line]) error { return upsertWithOptions(ctx, a.db, lineDiffs, upsertInput[*billing.Line, *db.BillingInvoiceUsageBasedLineConfigCreate]{ Create: func(tx *db.Client, line *billing.Line) (*db.BillingInvoiceUsageBasedLineConfigCreate, error) { if line.UsageBased.ConfigID == "" { @@ -352,6 +295,163 @@ func (a *adapter) upsertUsageBasedConfig(ctx context.Context, lineDiffs diff[*bi }) } +func (a *adapter) upsertInvoiceLines(ctx context.Context, in entitydiff.Diff[*billing.Line]) error { + return upsertWithOptions(ctx, a.db, in, upsertInput[*billing.Line, *db.BillingInvoiceLineCreate]{ + Create: func(tx *db.Client, line *billing.Line) (*db.BillingInvoiceLineCreate, error) { + if line.ID == "" { + line.ID = ulid.Make().String() + } + + create := tx.BillingInvoiceLine.Create(). + SetID(line.ID). + SetNamespace(line.Namespace). + SetInvoiceID(line.InvoiceID). + SetPeriodStart(line.Period.Start.In(time.UTC)). + SetPeriodEnd(line.Period.End.In(time.UTC)). + SetNillableParentLineID(line.ParentLineID). + SetNillableSplitLineGroupID(line.SplitLineGroupID). + SetNillableDeletedAt(line.DeletedAt). + SetInvoiceAt(line.InvoiceAt.In(time.UTC)). + SetStatus(billing.InvoiceLineStatusValid). + SetManagedBy(line.ManagedBy). + SetType(billing.InvoiceLineTypeUsageBased). + SetName(line.Name). + SetNillableDescription(line.Description). + SetCurrency(line.Currency). + SetMetadata(line.Metadata). + SetAnnotations(line.Annotations). + SetNillableChildUniqueReferenceID(line.ChildUniqueReferenceID). + // Totals + SetAmount(line.Totals.Amount). + SetChargesTotal(line.Totals.ChargesTotal). + SetDiscountsTotal(line.Totals.DiscountsTotal). + SetTaxesTotal(line.Totals.TaxesTotal). + SetTaxesInclusiveTotal(line.Totals.TaxesInclusiveTotal). + SetTaxesExclusiveTotal(line.Totals.TaxesExclusiveTotal). + SetTotal(line.Totals.Total). + // ExternalIDs + SetNillableInvoicingAppExternalID(lo.EmptyableToPtr(line.ExternalIDs.Invoicing)) + + if line.Subscription != nil { + create = create.SetSubscriptionID(line.Subscription.SubscriptionID). + SetSubscriptionPhaseID(line.Subscription.PhaseID). + SetSubscriptionItemID(line.Subscription.ItemID). + SetSubscriptionBillingPeriodFrom(line.Subscription.BillingPeriod.From.In(time.UTC)). + SetSubscriptionBillingPeriodTo(line.Subscription.BillingPeriod.To.In(time.UTC)) + } + + if line.TaxConfig != nil { + create = create.SetTaxConfig(*line.TaxConfig) + } + + if !line.RateCardDiscounts.IsEmpty() { + create = create.SetRatecardDiscounts(lo.ToPtr(line.RateCardDiscounts)) + } + + create = create. + SetNillableQuantity(line.UsageBased.Quantity). + SetUsageBasedLineID(line.UsageBased.ConfigID). + SetNillableFlatFeeLineID(nil) + + return create, nil + }, + UpsertItems: func(ctx context.Context, tx *db.Client, items []*db.BillingInvoiceLineCreate) error { + return tx.BillingInvoiceLine. + CreateBulk(items...). + OnConflict(sql.ConflictColumns(billinginvoiceline.FieldID), + sql.ResolveWithNewValues(), + sql.ResolveWith(func(u *sql.UpdateSet) { + u.SetIgnore(billinginvoiceline.FieldCreatedAt) + })). + UpdateQuantity(). + UpdateChildUniqueReferenceID(). + Exec(ctx) + }, + MarkDeleted: func(ctx context.Context, line *billing.Line) (*billing.Line, error) { + line.DeletedAt = lo.ToPtr(clock.Now().In(time.UTC)) + return line, nil + }, + }) +} + +func (a *adapter) upsertDetailedLines(ctx context.Context, in entitydiff.Diff[*billing.DetailedLine]) error { + return upsertWithOptions(ctx, a.db, in, upsertInput[*billing.DetailedLine, *db.BillingInvoiceLineCreate]{ + Create: func(tx *db.Client, line *billing.DetailedLine) (*db.BillingInvoiceLineCreate, error) { + if line.ID == "" { + line.ID = ulid.Make().String() + } + + create := tx.BillingInvoiceLine.Create(). + SetID(line.ID). + SetNamespace(line.Namespace). + SetInvoiceID(line.InvoiceID). + SetPeriodStart(line.Period.Start.In(time.UTC)). + SetPeriodEnd(line.Period.End.In(time.UTC)). + SetNillableParentLineID(line.ParentLineID). + SetNillableSplitLineGroupID(line.SplitLineGroupID). + SetNillableDeletedAt(line.DeletedAt). + SetInvoiceAt(line.InvoiceAt.In(time.UTC)). + SetStatus(billing.InvoiceLineStatusValid). + SetManagedBy(line.ManagedBy). + SetType(billing.InvoiceLineTypeUsageBased). + SetName(line.Name). + SetNillableDescription(line.Description). + SetCurrency(line.Currency). + SetMetadata(line.Metadata). + SetAnnotations(line.Annotations). + SetNillableChildUniqueReferenceID(line.ChildUniqueReferenceID). + // Totals + SetAmount(line.Totals.Amount). + SetChargesTotal(line.Totals.ChargesTotal). + SetDiscountsTotal(line.Totals.DiscountsTotal). + SetTaxesTotal(line.Totals.TaxesTotal). + SetTaxesInclusiveTotal(line.Totals.TaxesInclusiveTotal). + SetTaxesExclusiveTotal(line.Totals.TaxesExclusiveTotal). + SetTotal(line.Totals.Total). + // ExternalIDs + SetNillableInvoicingAppExternalID(lo.EmptyableToPtr(line.ExternalIDs.Invoicing)) + + if line.Subscription != nil { + create = create.SetSubscriptionID(line.Subscription.SubscriptionID). + SetSubscriptionPhaseID(line.Subscription.PhaseID). + SetSubscriptionItemID(line.Subscription.ItemID). + SetSubscriptionBillingPeriodFrom(line.Subscription.BillingPeriod.From.In(time.UTC)). + SetSubscriptionBillingPeriodTo(line.Subscription.BillingPeriod.To.In(time.UTC)) + } + + if line.TaxConfig != nil { + create = create.SetTaxConfig(*line.TaxConfig) + } + + if !line.RateCardDiscounts.IsEmpty() { + create = create.SetRatecardDiscounts(lo.ToPtr(line.RateCardDiscounts)) + } + + create = create.SetQuantity(line.FlatFee.Quantity). + SetFlatFeeLineID(line.FlatFee.ConfigID). + SetNillableUsageBasedLineID(nil) + + return create, nil + }, + UpsertItems: func(ctx context.Context, tx *db.Client, items []*db.BillingInvoiceLineCreate) error { + return tx.BillingInvoiceLine. + CreateBulk(items...). + OnConflict(sql.ConflictColumns(billinginvoiceline.FieldID), + sql.ResolveWithNewValues(), + sql.ResolveWith(func(u *sql.UpdateSet) { + u.SetIgnore(billinginvoiceline.FieldCreatedAt) + })). + UpdateQuantity(). + UpdateChildUniqueReferenceID(). + Exec(ctx) + }, + MarkDeleted: func(ctx context.Context, line *billing.DetailedLine) (*billing.DetailedLine, error) { + line.DeletedAt = lo.ToPtr(clock.Now().In(time.UTC)) + return line, nil + }, + }) +} + // TODO[OM-982]: Add pagination func (a *adapter) ListInvoiceLines(ctx context.Context, input billing.ListInvoiceLinesAdapterInput) ([]*billing.Line, error) { if err := input.Validate(); err != nil { diff --git a/openmeter/billing/adapter/upsert.go b/openmeter/billing/adapter/upsert.go index d07b38baec..23016bda8a 100644 --- a/openmeter/billing/adapter/upsert.go +++ b/openmeter/billing/adapter/upsert.go @@ -4,6 +4,7 @@ import ( "context" entdb "github.com/openmeterio/openmeter/openmeter/ent/db" + "github.com/openmeterio/openmeter/pkg/entitydiff" "github.com/openmeterio/openmeter/pkg/slicesx" ) @@ -15,20 +16,20 @@ type upsertInput[T any, CreateBulkType any] struct { type upsertOption[T any, CreateBulkType any] func(upsertInput[T, CreateBulkType]) upsertInput[T, CreateBulkType] -func upsertWithOptions[T any, CreateBulkType any](ctx context.Context, db *entdb.Client, itemDiff diff[T], baseSettings upsertInput[T, CreateBulkType], options ...upsertOption[T, CreateBulkType]) error { +func upsertWithOptions[T entitydiff.Entity, CreateBulkType any](ctx context.Context, db *entdb.Client, itemDiff entitydiff.Diff[T], baseSettings upsertInput[T, CreateBulkType], options ...upsertOption[T, CreateBulkType]) error { opts := baseSettings for _, option := range options { opts = option(opts) } - upsertItems := make([]CreateBulkType, 0, len(itemDiff.ToCreate)+len(itemDiff.ToUpdate)+len(itemDiff.ToDelete)) + upsertItems := make([]CreateBulkType, 0, len(itemDiff.Create)+len(itemDiff.Update)+len(itemDiff.Delete)) // Delete must be first, as we might have a constraint that prevents us from creating the item if not deleted before. - if len(itemDiff.ToDelete) > 0 && opts.MarkDeleted != nil { + if len(itemDiff.Delete) > 0 && opts.MarkDeleted != nil { // We formulate delete as a soft delete update, so that any changes happening alongside the deletion are persisted // to the database. - toDelete, err := slicesx.MapWithErr(itemDiff.ToDelete, func(item T) (T, error) { + toDelete, err := slicesx.MapWithErr(itemDiff.Delete, func(item T) (T, error) { return opts.MarkDeleted(ctx, item) }) if err != nil { @@ -45,8 +46,8 @@ func upsertWithOptions[T any, CreateBulkType any](ctx context.Context, db *entdb upsertItems = append(upsertItems, deleteCommands...) } - if len(itemDiff.ToCreate) > 0 { - toCreate, err := slicesx.MapWithErr(itemDiff.ToCreate, func(item T) (CreateBulkType, error) { + if len(itemDiff.Create) > 0 { + toCreate, err := slicesx.MapWithErr(itemDiff.Create, func(item T) (CreateBulkType, error) { return opts.Create(db, item) }) if err != nil { @@ -56,9 +57,9 @@ func upsertWithOptions[T any, CreateBulkType any](ctx context.Context, db *entdb upsertItems = append(upsertItems, toCreate...) } - if len(itemDiff.ToUpdate) > 0 { - toUpdate, err := slicesx.MapWithErr(itemDiff.ToUpdate, func(item T) (CreateBulkType, error) { - return opts.Create(db, item) + if len(itemDiff.Update) > 0 { + toUpdate, err := slicesx.MapWithErr(itemDiff.Update, func(item entitydiff.DiffUpdate[T]) (CreateBulkType, error) { + return opts.Create(db, item.ExpectedState) }) if err != nil { return err diff --git a/openmeter/billing/app.go b/openmeter/billing/app.go index 9bb59c8376..4eafff4118 100644 --- a/openmeter/billing/app.go +++ b/openmeter/billing/app.go @@ -4,8 +4,10 @@ import ( "context" "errors" "fmt" + "strings" "time" + "github.com/samber/lo" "github.com/samber/mo" "github.com/openmeterio/openmeter/openmeter/app" @@ -217,44 +219,54 @@ func (r UpsertInvoiceResult) MergeIntoInvoice(invoice *Invoice) error { if invoiceNumber, ok := r.GetInvoiceNumber(); ok { invoice.Number = invoiceNumber } - if externalID, ok := r.GetExternalID(); ok { invoice.ExternalIDs.Invoicing = externalID } + if !invoice.Lines.IsPresent() { + return errors.New("invoice has no expanded lines") + } + var outErr error // Let's merge the line IDs - if len(r.GetLineExternalIDs()) > 0 { - flattenedLines := invoice.FlattenLinesByID() - - // Merge the line IDs - for lineID, externalID := range r.GetLineExternalIDs() { - if line, ok := flattenedLines[lineID]; ok { - line.ExternalIDs.Invoicing = externalID - } else { - outErr = errors.Join(outErr, fmt.Errorf("line not found in invoice: %s", lineID)) - } + lineIDToExternalID := r.GetLineExternalIDs() + dicountIDToExternalID := r.GetLineDiscountExternalIDs() + + lines := invoice.Lines.OrEmpty() + + for _, line := range lines { + if externalID, ok := lineIDToExternalID[line.ID]; ok { + line.ExternalIDs.Invoicing = externalID + delete(lineIDToExternalID, line.ID) } - // Let's merge the line discount IDs - dicountIDToExternalID := r.GetLineDiscountExternalIDs() + foundIDs := line.SetDiscountExternalIDs(dicountIDToExternalID) + for _, id := range foundIDs { + delete(dicountIDToExternalID, id) + } - for _, line := range flattenedLines { - for idx, discount := range line.Discounts.Amount { - if externalID, ok := dicountIDToExternalID[discount.ID]; ok { - line.Discounts.Amount[idx].ExternalIDs.Invoicing = externalID - } + for idx, detailedLine := range line.Children { + if externalID, ok := lineIDToExternalID[detailedLine.ID]; ok { + line.Children[idx].ExternalIDs.Invoicing = externalID + delete(lineIDToExternalID, detailedLine.ID) } - for idx, discount := range line.Discounts.Usage { - if externalID, ok := dicountIDToExternalID[discount.ID]; ok { - line.Discounts.Usage[idx].ExternalIDs.Invoicing = externalID - } + foundIDs := line.Children[idx].AmountDiscounts.SetDiscountExternalIDs(dicountIDToExternalID) + for _, id := range foundIDs { + delete(dicountIDToExternalID, id) } } } + if len(lineIDToExternalID) > 0 { + outErr = errors.Join(outErr, fmt.Errorf("some lines were not found in the invoice: ids=[%s]", strings.Join(lo.Keys(lineIDToExternalID), ", "))) + } + + if len(dicountIDToExternalID) > 0 { + outErr = errors.Join(outErr, fmt.Errorf("some line discounts were not found in the invoice: ids=[%s]", strings.Join(lo.Keys(dicountIDToExternalID), ", "))) + } + return outErr } diff --git a/openmeter/billing/httpdriver/invoiceline.go b/openmeter/billing/httpdriver/invoiceline.go index c936797eb6..f78c085ab4 100644 --- a/openmeter/billing/httpdriver/invoiceline.go +++ b/openmeter/billing/httpdriver/invoiceline.go @@ -72,14 +72,6 @@ func (h *handler) CreatePendingLine() CreatePendingLineHandler { } } - for _, line := range lineEntities { - if line.Type == billing.InvoiceLineTypeFee { - return CreatePendingLineRequest{}, billing.ValidationError{ - Err: fmt.Errorf("creating flat fee lines is not supported, please use usage based lines instead"), - } - } - } - return CreatePendingLineRequest{ Customer: customer.CustomerID{ Namespace: ns, @@ -105,11 +97,6 @@ func (h *handler) CreatePendingLine() CreatePendingLineHandler { } out.Lines, err = slicesx.MapWithErr(res.Lines, func(line *billing.Line) (api.InvoiceLine, error) { - if line.Type == billing.InvoiceLineTypeFee { - return api.InvoiceLine{}, billing.ValidationError{ - Err: fmt.Errorf("flat fee lines are not supported"), - } - } return mapInvoiceLineToAPI(line) }) if err != nil { @@ -147,10 +134,8 @@ func mapCreateLineToEntity(line api.InvoicePendingLineCreate, ns string) (*billi }), Metadata: lo.FromPtrOr(line.Metadata, map[string]string{}), - Type: billing.InvoiceLineTypeUsageBased, ManagedBy: billing.ManuallyManagedLine, - Status: billing.InvoiceLineStatusValid, // This is not settable from outside Period: billing.Period{ Start: line.Period.From, End: line.Period.To, @@ -160,7 +145,7 @@ func mapCreateLineToEntity(line api.InvoicePendingLineCreate, ns string) (*billi TaxConfig: rateCardParsed.TaxConfig, RateCardDiscounts: rateCardParsed.Discounts, }, - UsageBased: &billing.UsageBasedLine{ + UsageBased: billing.UsageBasedLine{ Price: rateCardParsed.Price, FeatureKey: rateCardParsed.FeatureKey, }, @@ -187,10 +172,6 @@ func mapDetailedLinesToAPI(children billing.LineChildren) (*[]api.InvoiceDetaile out := make([]api.InvoiceDetailedLine, 0, len(children)) for _, child := range children { - if child.Type == billing.InvoiceLineTypeUsageBased { - return nil, fmt.Errorf("usage based lines are not supported as children of usage based lines") - } - mappedLine, err := mapDetailedLineToAPI(child) if err != nil { return nil, fmt.Errorf("failed to map child line: %w", err) @@ -201,8 +182,8 @@ func mapDetailedLinesToAPI(children billing.LineChildren) (*[]api.InvoiceDetaile return &out, nil } -func mapDetailedLineToAPI(line *billing.Line) (api.InvoiceDetailedLine, error) { - discountsAPI, err := mapDiscountsToAPI(line.Discounts) +func mapDetailedLineToAPI(line billing.DetailedLine) (api.InvoiceDetailedLine, error) { + amountDiscountsAPI, err := mapAmountDiscountsToAPI(line.AmountDiscounts) if err != nil { return api.InvoiceDetailedLine{}, fmt.Errorf("failed to map discounts: %w", err) } @@ -217,7 +198,7 @@ func mapDetailedLineToAPI(line *billing.Line) (api.InvoiceDetailedLine, error) { InvoiceAt: line.InvoiceAt, Currency: string(line.Currency), - Status: api.InvoiceLineStatus(line.Status), + Status: api.InvoiceLineStatusDetailed, Description: line.Description, Name: line.Name, @@ -249,8 +230,10 @@ func mapDetailedLineToAPI(line *billing.Line) (api.InvoiceDetailedLine, error) { Quantity: lo.ToPtr(line.FlatFee.Quantity.String()), }, - Discounts: discountsAPI, - Totals: mapTotalsToAPI(line.Totals), + Discounts: &api.InvoiceDetailedLineDiscounts{ + Amount: amountDiscountsAPI, + }, + Totals: mapTotalsToAPI(line.Totals), ExternalIds: mapLineAppExternalIdsToAPI(line.ExternalIDs), Subscription: mapSubscriptionReferencesToAPI(line.Subscription), @@ -268,14 +251,6 @@ func mapLineAppExternalIdsToAPI(externalIds billing.LineExternalIDs) *api.Invoic } func mapInvoiceLineToAPI(line *billing.Line) (api.InvoiceLine, error) { - if line.Type != billing.InvoiceLineTypeUsageBased { - return api.InvoiceLine{}, fmt.Errorf("line type is not usage based [line=%s]", line.ID) - } - - if line.UsageBased == nil { - return api.InvoiceLine{}, fmt.Errorf("usage based line details are nil [line=%s]", line.ID) - } - if line.UsageBased.Price == nil { return api.InvoiceLine{}, fmt.Errorf("price is nil [line=%s]", line.ID) } @@ -304,9 +279,8 @@ func mapInvoiceLineToAPI(line *billing.Line) (api.InvoiceLine, error) { UpdatedAt: line.UpdatedAt, InvoiceAt: line.InvoiceAt, - // TODO: deprecation Currency: string(line.Currency), - Status: api.InvoiceLineStatus(line.Status), + Status: api.InvoiceLineStatusValid, Description: line.Description, Name: line.Name, @@ -379,60 +353,80 @@ func mapDiscountsToAPI(discounts billing.LineDiscounts) (*api.InvoiceLineDiscoun if discounts.IsEmpty() { return nil, nil } - out := api.InvoiceLineDiscounts{} - if len(discounts.Amount) > 0 { - mapped, err := slicesx.MapWithErr(discounts.Amount, func(discount billing.AmountLineDiscountManaged) (api.InvoiceLineAmountDiscount, error) { - reason, err := mapDiscountReasonToAPI(discount.Reason) - if err != nil { - return api.InvoiceLineAmountDiscount{}, fmt.Errorf("failed to map discount reason: %w", err) - } + amountDiscounts, err := mapAmountDiscountsToAPI(discounts.Amount) + if err != nil { + return nil, fmt.Errorf("failed to map amount discounts: %w", err) + } - return api.InvoiceLineAmountDiscount{ - Id: discount.ID, - Amount: discount.Amount.String(), - CreatedAt: discount.CreatedAt, - DeletedAt: discount.DeletedAt, - UpdatedAt: discount.UpdatedAt, - Description: discount.Description, - ExternalIds: mapLineAppExternalIdsToAPI(discount.ExternalIDs), - Reason: reason, - }, nil - }) + usageDiscounts, err := mapUsageDiscountsToAPI(discounts.Usage) + if err != nil { + return nil, fmt.Errorf("failed to map usage discounts: %w", err) + } + + return &api.InvoiceLineDiscounts{ + Usage: usageDiscounts, + Amount: amountDiscounts, + }, nil +} + +func mapAmountDiscountsToAPI(discounts billing.AmountLineDiscountsManaged) (*[]api.InvoiceLineAmountDiscount, error) { + if len(discounts) == 0 { + return nil, nil + } + + mapped, err := slicesx.MapWithErr(discounts, func(discount billing.AmountLineDiscountManaged) (api.InvoiceLineAmountDiscount, error) { + reason, err := mapDiscountReasonToAPI(discount.Reason) if err != nil { - return nil, fmt.Errorf("failed to map amount discounts: %w", err) + return api.InvoiceLineAmountDiscount{}, fmt.Errorf("failed to map discount reason: %w", err) } - out.Amount = lo.ToPtr(mapped) + return api.InvoiceLineAmountDiscount{ + Id: discount.ID, + Amount: discount.Amount.String(), + CreatedAt: discount.CreatedAt, + DeletedAt: discount.DeletedAt, + UpdatedAt: discount.UpdatedAt, + Description: discount.Description, + ExternalIds: mapLineAppExternalIdsToAPI(discount.ExternalIDs), + Reason: reason, + }, nil + }) + if err != nil { + return nil, fmt.Errorf("failed to map amount discounts: %w", err) } - if len(discounts.Usage) > 0 { - mapped, err := slicesx.MapWithErr(discounts.Usage, func(discount billing.UsageLineDiscountManaged) (api.InvoiceLineUsageDiscount, error) { - reason, err := mapDiscountReasonToAPI(discount.Reason) - if err != nil { - return api.InvoiceLineUsageDiscount{}, fmt.Errorf("failed to map discount reason: %w", err) - } + return &mapped, nil +} - return api.InvoiceLineUsageDiscount{ - Id: discount.ID, - Quantity: discount.Quantity.String(), - PreLinePeriodQuantity: decimalPtrToStringPtrIgnoringZeroValue(discount.PreLinePeriodQuantity), - CreatedAt: discount.CreatedAt, - DeletedAt: discount.DeletedAt, - UpdatedAt: discount.UpdatedAt, - Description: discount.Description, - ExternalIds: mapLineAppExternalIdsToAPI(discount.ExternalIDs), - Reason: reason, - }, nil - }) +func mapUsageDiscountsToAPI(discounts billing.UsageLineDiscountsManaged) (*[]api.InvoiceLineUsageDiscount, error) { + if len(discounts) == 0 { + return nil, nil + } + + mapped, err := slicesx.MapWithErr(discounts, func(discount billing.UsageLineDiscountManaged) (api.InvoiceLineUsageDiscount, error) { + reason, err := mapDiscountReasonToAPI(discount.Reason) if err != nil { - return nil, fmt.Errorf("failed to map amount discounts: %w", err) + return api.InvoiceLineUsageDiscount{}, fmt.Errorf("failed to map discount reason: %w", err) } - out.Usage = lo.ToPtr(mapped) + return api.InvoiceLineUsageDiscount{ + Id: discount.ID, + Quantity: discount.Quantity.String(), + PreLinePeriodQuantity: decimalPtrToStringPtrIgnoringZeroValue(discount.PreLinePeriodQuantity), + CreatedAt: discount.CreatedAt, + DeletedAt: discount.DeletedAt, + UpdatedAt: discount.UpdatedAt, + Description: discount.Description, + ExternalIds: mapLineAppExternalIdsToAPI(discount.ExternalIDs), + Reason: reason, + }, nil + }) + if err != nil { + return nil, fmt.Errorf("failed to map amount discounts: %w", err) } - return &out, nil + return &mapped, nil } func mapDiscountReasonToAPI(reason billing.DiscountReason) (api.BillingDiscountReason, error) { @@ -557,10 +551,8 @@ func mapSimulationLineToEntity(line api.InvoiceSimulationLine) (*billing.Line, e Description: line.Description, }), Metadata: lo.FromPtrOr(line.Metadata, map[string]string{}), - Type: billing.InvoiceLineTypeUsageBased, ManagedBy: billing.ManuallyManagedLine, - Status: billing.InvoiceLineStatusValid, Period: billing.Period{ Start: line.Period.From.Truncate(streaming.MinimumWindowSizeDuration), End: line.Period.To.Truncate(streaming.MinimumWindowSizeDuration), @@ -570,7 +562,7 @@ func mapSimulationLineToEntity(line api.InvoiceSimulationLine) (*billing.Line, e TaxConfig: rateCardParsed.TaxConfig, RateCardDiscounts: rateCardParsed.Discounts, }, - UsageBased: &billing.UsageBasedLine{ + UsageBased: billing.UsageBasedLine{ Price: rateCardParsed.Price, FeatureKey: rateCardParsed.FeatureKey, Quantity: &qty, @@ -602,9 +594,6 @@ func lineFromInvoiceLineReplaceUpdate(line api.InvoiceLineReplaceUpdate, invoice Metadata: lo.FromPtrOr(line.Metadata, map[string]string{}), ManagedBy: billing.ManuallyManagedLine, - Status: billing.InvoiceLineStatusValid, - - Type: billing.InvoiceLineTypeUsageBased, InvoiceID: invoice.ID, Currency: invoice.Currency, @@ -618,7 +607,7 @@ func lineFromInvoiceLineReplaceUpdate(line api.InvoiceLineReplaceUpdate, invoice TaxConfig: rateCardParsed.TaxConfig, RateCardDiscounts: rateCardParsed.Discounts, }, - UsageBased: &billing.UsageBasedLine{ + UsageBased: billing.UsageBasedLine{ Price: rateCardParsed.Price, FeatureKey: rateCardParsed.FeatureKey, @@ -628,14 +617,8 @@ func lineFromInvoiceLineReplaceUpdate(line api.InvoiceLineReplaceUpdate, invoice } func mergeLineFromInvoiceLineReplaceUpdate(existing *billing.Line, line api.InvoiceLineReplaceUpdate) (*billing.Line, bool, error) { - if existing.Type != billing.InvoiceLineTypeUsageBased { - return nil, false, billing.ValidationError{ - Err: fmt.Errorf("line type change is not supported for line %s", existing.ID), - } - } - oldBase := existing.LineBase.Clone() - oldUBP := existing.UsageBased.Clone() + oldUBP := existing.UsageBased rateCardParsed, err := mapAndValidateInvoiceLineRateCardDeprecatedFields(invoiceLineRateCardItems{ RateCard: line.RateCard, @@ -720,12 +703,6 @@ func (h *handler) mergeInvoiceLinesFromAPI(ctx context.Context, invoice *billing return billing.InvoiceLines{}, fmt.Errorf("failed to create new line: %w", err) } - if newLine.Type == billing.InvoiceLineTypeFee { - return billing.InvoiceLines{}, billing.ValidationError{ - Err: fmt.Errorf("creating flat fee lines is not supported, please use usage based lines instead"), - } - } - if invoice.Status != billing.InvoiceStatusGathering { newLine, err = h.service.SnapshotLineQuantity(ctx, billing.SnapshotLineQuantityInput{ Invoice: invoice, @@ -746,12 +723,6 @@ func (h *handler) mergeInvoiceLinesFromAPI(ctx context.Context, invoice *billing return billing.InvoiceLines{}, fmt.Errorf("failed to merge line: %w", err) } - if changed && mergedLine.Type == billing.InvoiceLineTypeFee { - return billing.InvoiceLines{}, billing.ValidationError{ - Err: fmt.Errorf("updating flat fee lines is not supported, please use usage based lines instead"), - } - } - if changed && invoice.Status != billing.InvoiceStatusGathering { mergedLine, err = h.service.SnapshotLineQuantity(ctx, billing.SnapshotLineQuantityInput{ Invoice: invoice, diff --git a/openmeter/billing/invoice.go b/openmeter/billing/invoice.go index 7ff39c8927..feecec84c7 100644 --- a/openmeter/billing/invoice.go +++ b/openmeter/billing/invoice.go @@ -404,12 +404,10 @@ func (i Invoice) RemoveMetaForCompare() Invoice { return invoice } -func (i *Invoice) FlattenLinesByID() map[string]*Line { - out := make(map[string]*Line, len(i.Lines.OrEmpty())) +func (i *Invoice) GetDetailedLinesByID() map[string]DetailedLine { + out := make(map[string]DetailedLine, len(i.Lines.OrEmpty())) for _, line := range i.Lines.OrEmpty() { - out[line.ID] = line - for _, child := range line.Children { out[child.ID] = child } @@ -418,31 +416,15 @@ func (i *Invoice) FlattenLinesByID() map[string]*Line { return out } -// getLeafLines returns the leaf lines -func (i *Invoice) getLeafLines() []*Line { - var leafLines []*Line - - for _, line := range i.FlattenLinesByID() { - // Skip non leaf nodes - if line.Type != InvoiceLineTypeFee { - continue - } - - leafLines = append(leafLines, line) - } - - return leafLines -} - -// GetLeafLinesWithConsolidatedTaxBehavior returns the leaf lines with the tax behavior set to the invoice's tax behavior +// GetDetailedLinesWithConsolidatedTaxBehavior returns the detailed lines with the tax behavior set to the invoice's tax behavior // unless the line already has a tax behavior set. -func (i *Invoice) GetLeafLinesWithConsolidatedTaxBehavior() []*Line { - leafLines := i.getLeafLines() +func (i *Invoice) GetDetailedLinesWithConsolidatedTaxBehavior() []DetailedLine { + leafLines := lo.Values(i.GetDetailedLinesByID()) if i.Workflow.Config.Invoicing.DefaultTaxConfig == nil { return leafLines } - return lo.Map(leafLines, func(line *Line, _ int) *Line { + return lo.Map(leafLines, func(line DetailedLine, _ int) DetailedLine { line.TaxConfig = productcatalog.MergeTaxConfigs(i.Workflow.Config.Invoicing.DefaultTaxConfig, line.TaxConfig) return line }) @@ -469,55 +451,7 @@ func (i Invoice) RemoveCircularReferences() Invoice { } func (i *Invoice) SortLines() { - if !i.Lines.IsPresent() { - return - } - - lines := i.Lines.OrEmpty() - - sortLines(lines) - - i.Lines = NewInvoiceLines(lines) -} - -func sortLines(lines []*Line) { - sort.Slice(lines, func(a, b int) bool { - lineA := lines[a] - lineB := lines[b] - - // If both lines are flat fee lines, we sort them by index if possible - if lineA.Type == InvoiceLineTypeFee && lineB.Type == InvoiceLineTypeFee { - if lineA.FlatFee.Index != nil && lineB.FlatFee.Index != nil { - return *lineA.FlatFee.Index < *lineB.FlatFee.Index - } - - if lineA.FlatFee.Index != nil { - return true - } - - if lineB.FlatFee.Index != nil { - return false - } - } - - if nameOrder := strings.Compare(lineA.Name, lineB.Name); nameOrder != 0 { - return nameOrder < 0 - } - - if !lineA.Period.Start.Equal(lineB.Period.Start) { - return lineA.Period.Start.Before(lineB.Period.Start) - } - - return strings.Compare(lineA.ID, lineB.ID) < 0 - }) - - for idx, line := range lines { - if line.Type == InvoiceLineTypeUsageBased { - sortLines(line.Children) - } - - lines[idx] = line - } + i.Lines.Sort() } type InvoiceLines struct { @@ -586,10 +520,39 @@ func (c *InvoiceLines) ReplaceByID(id string, newLine *Line) bool { return false } +func (c *InvoiceLines) Sort() { + if c.IsAbsent() { + return + } + + lines := c.OrEmpty() + + sort.Slice(lines, func(a, b int) bool { + lineA := lines[a] + lineB := lines[b] + + if nameOrder := strings.Compare(lineA.Name, lineB.Name); nameOrder != 0 { + return nameOrder < 0 + } + + if !lineA.Period.Start.Equal(lineB.Period.Start) { + return lineA.Period.Start.Before(lineB.Period.Start) + } + + return strings.Compare(lineA.ID, lineB.ID) < 0 + }) + + for _, line := range lines { + line.SortDetailedLines() + } + + c.Option = mo.Some(lines) +} + // NonDeletedLineCount returns the number of lines that are not deleted and have a valid status (e.g. we are ignoring split lines) func (c InvoiceLines) NonDeletedLineCount() int { return lo.CountBy(c.OrEmpty(), func(l *Line) bool { - return l.DeletedAt == nil && l.Status == InvoiceLineStatusValid + return l.DeletedAt == nil }) } diff --git a/openmeter/billing/invoice_test.go b/openmeter/billing/invoice_test.go index 676e5d5d4a..98d897cffe 100644 --- a/openmeter/billing/invoice_test.go +++ b/openmeter/billing/invoice_test.go @@ -11,28 +11,26 @@ import ( ) func TestSortLines(t *testing.T) { - lines := []*Line{ + lines := NewInvoiceLines([]*Line{ { LineBase: LineBase{ ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ Name: "usage-based-line", Description: lo.ToPtr("index=1"), }), - Type: InvoiceLineTypeUsageBased, Period: Period{ Start: time.Now().Add(time.Hour * 24), }, }, - Children: NewLineChildren([]*Line{ + Children: NewLineChildren([]DetailedLine{ { LineBase: LineBase{ ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ Name: "child-2", Description: lo.ToPtr("index=1.1"), }), - Type: InvoiceLineTypeFee, }, - FlatFee: &FlatFeeLine{ + FlatFee: FlatFeeLine{ Index: lo.ToPtr(1), }, }, @@ -42,9 +40,8 @@ func TestSortLines(t *testing.T) { Name: "child-1", Description: lo.ToPtr("index=1.0"), }), - Type: InvoiceLineTypeFee, }, - FlatFee: &FlatFeeLine{ + FlatFee: FlatFeeLine{ Index: lo.ToPtr(0), }, }, @@ -56,20 +53,19 @@ func TestSortLines(t *testing.T) { Name: "usage-based-line", Description: lo.ToPtr("index=0"), }), - Type: InvoiceLineTypeUsageBased, Period: Period{ Start: time.Now(), }, }, Children: NewLineChildren(nil), }, - } + }) - sortLines(lines) + lines.Sort() - require.Equal(t, *lines[0].Description, "index=0") - require.Equal(t, *lines[1].Description, "index=1") - children := lines[1].Children + require.Equal(t, *lines.OrEmpty()[0].Description, "index=0") + require.Equal(t, *lines.OrEmpty()[1].Description, "index=1") + children := lines.OrEmpty()[1].Children require.Equal(t, *children[0].Description, "index=1.0") require.Equal(t, *children[1].Description, "index=1.1") } diff --git a/openmeter/billing/invoiceline.go b/openmeter/billing/invoiceline.go index 07f4f8b0f4..0cd5107971 100644 --- a/openmeter/billing/invoiceline.go +++ b/openmeter/billing/invoiceline.go @@ -5,6 +5,8 @@ import ( "fmt" "reflect" "slices" + "sort" + "strings" "time" "github.com/alpacahq/alpacadecimal" @@ -130,7 +132,6 @@ type LineBase struct { Metadata map[string]string `json:"metadata,omitempty"` Annotations models.Annotations `json:"annotations,omitempty"` - Type InvoiceLineType `json:"type"` ManagedBy InvoiceLineManagedBy `json:"managedBy"` InvoiceID string `json:"invoiceID,omitempty"` @@ -144,8 +145,7 @@ type LineBase struct { ParentLineID *string `json:"parentLine,omitempty"` SplitLineGroupID *string `json:"splitLineGroupId,omitempty"` - Status InvoiceLineStatus `json:"status"` - ChildUniqueReferenceID *string `json:"childUniqueReferenceID,omitempty"` + ChildUniqueReferenceID *string `json:"childUniqueReferenceID,omitempty"` TaxConfig *productcatalog.TaxConfig `json:"taxOverrides,omitempty"` RateCardDiscounts Discounts `json:"rateCardDiscounts,omitempty"` @@ -186,10 +186,6 @@ func (i LineBase) Validate() error { errs = append(errs, errors.New("name is required")) } - if i.Type == "" { - errs = append(errs, errors.New("type is required")) - } - if err := i.Currency.Validate(); err != nil { errs = append(errs, fmt.Errorf("currency: %w", err)) } @@ -198,10 +194,6 @@ func (i LineBase) Validate() error { errs = append(errs, fmt.Errorf("invalid managed by %s", i.ManagedBy)) } - if i.Status == InvoiceLineStatusDetailed && i.ManagedBy != SystemManagedLine { - errs = append(errs, errors.New("detailed lines must be system managed")) - } - return errors.Join(errs...) } @@ -301,19 +293,15 @@ func (i FlatFeeLine) Clone() *FlatFeeLine { return &i } -func (i FlatFeeLine) Equal(other *FlatFeeLine) bool { - if other == nil { - return false - } - return reflect.DeepEqual(i, *other) +func (i FlatFeeLine) Equal(other FlatFeeLine) bool { + return reflect.DeepEqual(i, other) } type Line struct { LineBase `json:",inline"` // TODO[OM-1060]: Make it a proper union type instead of having both fields as public - FlatFee *FlatFeeLine `json:"flatFee,omitempty"` - UsageBased *UsageBasedLine `json:"usageBased,omitempty"` + UsageBased UsageBasedLine `json:"usageBased,omitempty"` Children LineChildren `json:"children,omitempty"` ParentLine *Line `json:"parent,omitempty"` @@ -346,13 +334,7 @@ func (i Line) CloneWithoutDependencies() *Line { clone.SplitLineHierarchy = nil clone.SplitLineGroupID = nil - if clone.FlatFee != nil { - clone.FlatFee.ConfigID = "" - } - - if clone.UsageBased != nil { - clone.UsageBased.ConfigID = "" - } + clone.UsageBased.ConfigID = "" return clone } @@ -373,10 +355,6 @@ func (i Line) RemoveCircularReferences() *Line { clone.ParentLine = nil clone.DBState = nil - clone.Children = lo.Map(clone.Children, func(l *Line, _ int) *Line { - return l.RemoveCircularReferences() - }) - return clone } @@ -392,14 +370,6 @@ func (i Line) RemoveMetaForCompare() *Line { out.Children = NewLineChildren(nil) } - for _, child := range out.Children { - child.ParentLine = out - - if len(child.Children) == 0 { - child.Children = NewLineChildren(nil) - } - } - out.ParentLine = nil out.DBState = nil return out @@ -422,20 +392,13 @@ func (i Line) clone(opts cloneOptions) *Line { res.DBState = i.DBState } - switch i.Type { - case InvoiceLineTypeFee: - res.FlatFee = i.FlatFee.Clone() - case InvoiceLineTypeUsageBased: - res.UsageBased = i.UsageBased.Clone() - } - + res.UsageBased = i.UsageBased res.LineBase = i.LineBase.Clone() if !opts.skipChildren { - res.Children = lo.Map(i.Children, func(line *Line, _ int) *Line { - cloned := line.Clone() - cloned.ParentLine = line - return cloned + // TODO: should we even clone? + res.Children = lo.Map(i.Children, func(line DetailedLine, _ int) DetailedLine { + return line.Clone() }) } @@ -470,82 +433,18 @@ func (i Line) Validate() error { errs = append(errs, fmt.Errorf("discounts: %w", err)) } - if len(i.Children) > 0 { - if i.Status == InvoiceLineStatusDetailed { - errs = append(errs, errors.New("detailed lines are not allowed for detailed lines (e.g. no nesting is allowed)")) - } else { - for j, detailedLine := range i.Children { - if err := detailedLine.Validate(); err != nil { - errs = append(errs, fmt.Errorf("detailedLines[%d]: %w", j, err)) - } - - switch i.Status { - case InvoiceLineStatusValid: - if detailedLine.Status != InvoiceLineStatusDetailed { - errs = append(errs, fmt.Errorf("detailedLines[%d]: valid line's detailed lines must have detailed status", j)) - continue - } - - if detailedLine.Type != InvoiceLineTypeFee { - errs = append(errs, fmt.Errorf("detailedLines[%d]: valid line's detailed lines must be fee typed", j)) - continue - } - } - } + for j, detailedLine := range i.Children { + if err := detailedLine.Validate(); err != nil { + errs = append(errs, fmt.Errorf("detailedLines[%d]: %w", j, err)) } } - switch i.Type { - case InvoiceLineTypeFee: - if err := i.ValidateFee(); err != nil { - errs = append(errs, err) - } - - price := productcatalog.NewPriceFrom(productcatalog.FlatPrice{ - Amount: i.FlatFee.PerUnitAmount, - PaymentTerm: i.FlatFee.PaymentTerm, - }) - - if err := i.RateCardDiscounts.ValidateForPrice(price); err != nil { - errs = append(errs, fmt.Errorf("rateCardDiscounts: %w", err)) - } - case InvoiceLineTypeUsageBased: - if err := i.ValidateUsageBased(); err != nil { - errs = append(errs, err) - } - - if err := i.RateCardDiscounts.ValidateForPrice(i.UsageBased.Price); err != nil { - errs = append(errs, fmt.Errorf("rateCardDiscounts: %w", err)) - } - - default: - errs = append(errs, fmt.Errorf("unsupported type: %s", i.Type)) - } - - return errors.Join(errs...) -} - -func (i Line) ValidateFee() error { - var errs []error - - if i.FlatFee == nil { - return errors.New("flat fee is required") - } - - if i.FlatFee.PerUnitAmount.IsNegative() { - errs = append(errs, errors.New("price should be positive or zero")) - } - - if i.FlatFee.Quantity.IsNegative() { - errs = append(errs, errors.New("quantity should be positive or zero")) - } - - if !slices.Contains(FlatFeeCategory("").Values(), string(i.FlatFee.Category)) { - errs = append(errs, fmt.Errorf("invalid category %s", i.FlatFee.Category)) + if err := i.ValidateUsageBased(); err != nil { + errs = append(errs, err) } - if !slices.Contains(productcatalog.PaymentTermType("").Values(), string(i.FlatFee.PaymentTerm)) { - errs = append(errs, fmt.Errorf("invalid payment term %s", i.FlatFee.PaymentTerm)) + if err := i.RateCardDiscounts.ValidateForPrice(i.UsageBased.Price); err != nil { + errs = append(errs, fmt.Errorf("rateCardDiscounts: %w", err)) } return errors.Join(errs...) @@ -577,10 +476,6 @@ func (i *Line) DisassociateChildren() { } func (i Line) DependsOnMeteredQuantity() bool { - if i.Type != InvoiceLineTypeUsageBased { - return false - } - if i.UsageBased.Price.Type() == productcatalog.FlatPriceType { return false } @@ -588,35 +483,69 @@ func (i Line) DependsOnMeteredQuantity() bool { return true } -// helper functions for generating new lines -type NewFlatFeeLineInput struct { - ID string - CreatedAt time.Time - UpdatedAt time.Time +func (i *Line) SortDetailedLines() { + sort.Slice(i.Children, func(a, b int) bool { + lineA := i.Children[a] + lineB := i.Children[b] - Namespace string - Period Period - InvoiceAt time.Time + if lineA.FlatFee.Index != nil && lineB.FlatFee.Index != nil { + return *lineA.FlatFee.Index < *lineB.FlatFee.Index + } - InvoiceID string + if lineA.FlatFee.Index != nil { + return true + } - Name string - Metadata map[string]string - Annotations models.Annotations - Description *string + if lineB.FlatFee.Index != nil { + return false + } - Currency currencyx.Code + if nameOrder := strings.Compare(lineA.Name, lineB.Name); nameOrder != 0 { + return nameOrder < 0 + } - ManagedBy InvoiceLineManagedBy + if !lineA.Period.Start.Equal(lineB.Period.Start) { + return lineA.Period.Start.Before(lineB.Period.Start) + } - PerUnitAmount alpacadecimal.Decimal - PaymentTerm productcatalog.PaymentTermType + return strings.Compare(lineA.ID, lineB.ID) < 0 + }) +} - RateCardDiscounts Discounts +func (i Line) SetDiscountExternalIDs(externalIDs map[string]string) []string { + foundIDs := []string{} + + for idx := range i.Discounts.Amount { + discount := &i.Discounts.Amount[idx] + if externalID, ok := externalIDs[discount.ID]; ok { + discount.ExternalIDs.Invoicing = externalID + foundIDs = append(foundIDs, discount.ID) + } + } + + for idx := range i.Discounts.Usage { + discount := &i.Discounts.Usage[idx] + + if externalID, ok := externalIDs[discount.ID]; ok { + discount.ExternalIDs.Invoicing = externalID + foundIDs = append(foundIDs, discount.ID) + } + } + + return foundIDs } -func NewFlatFeeLine(input NewFlatFeeLineInput) *Line { - return &Line{ +type DetailedLine struct { + LineBase `json:",inline"` + + // TODO[OM-1060]: Make it a proper union type instead of having both fields as public + FlatFee FlatFeeLine `json:"flatFee,omitempty"` + + AmountDiscounts AmountLineDiscountsManaged `json:"amountDiscounts,omitempty"` +} + +func NewDetailedLine(input NewFlatFeeLineInput) *DetailedLine { + return &DetailedLine{ LineBase: LineBase{ ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ Namespace: input.Namespace, @@ -634,16 +563,12 @@ func NewFlatFeeLine(input NewFlatFeeLineInput) *Line { Metadata: input.Metadata, Annotations: input.Annotations, - Status: InvoiceLineStatusValid, - - Type: InvoiceLineTypeFee, - ManagedBy: lo.CoalesceOrEmpty(input.ManagedBy, SystemManagedLine), Currency: input.Currency, RateCardDiscounts: input.RateCardDiscounts, }, - FlatFee: &FlatFeeLine{ + FlatFee: FlatFeeLine{ PerUnitAmount: input.PerUnitAmount, PaymentTerm: input.PaymentTerm, Category: FlatFeeCategoryRegular, @@ -652,6 +577,125 @@ func NewFlatFeeLine(input NewFlatFeeLineInput) *Line { } } +func (i DetailedLine) LineID() LineID { + return LineID{ + Namespace: i.Namespace, + ID: i.ID, + } +} + +// TODO: check all members if they are in use?! + +// CloneWithoutDependencies returns a clone of the line without any external dependencies. Could be used +// for creating a new line without any references to the parent or children (or config IDs). +func (i DetailedLine) CloneWithoutDependencies() DetailedLine { + clone := i.clone(cloneOptions{ + skipDBState: true, + skipChildren: true, + skipDiscounts: true, + }) + + clone.ID = "" + clone.ParentLineID = nil + clone.SplitLineGroupID = nil + + clone.FlatFee.ConfigID = "" + + return clone +} + +// TODO[later]: do we need this?! +func (i DetailedLine) Clone() DetailedLine { + return i.clone(cloneOptions{}) +} + +func (i DetailedLine) clone(opts cloneOptions) DetailedLine { + res := DetailedLine{} + + res.FlatFee = *i.FlatFee.Clone() + res.LineBase = i.LineBase.Clone() + + if !opts.skipDiscounts { + res.AmountDiscounts = i.AmountDiscounts.Clone() + } + + return res +} + +func (i DetailedLine) Validate() error { + var errs []error + if err := i.LineBase.Validate(); err != nil { + errs = append(errs, err) + } + + if err := i.AmountDiscounts.Validate(); err != nil { + errs = append(errs, fmt.Errorf("amount discounts: %w", err)) + } + if err := i.ValidateFee(); err != nil { + errs = append(errs, err) + } + + price := productcatalog.NewPriceFrom(productcatalog.FlatPrice{ + Amount: i.FlatFee.PerUnitAmount, + PaymentTerm: i.FlatFee.PaymentTerm, + }) + + if err := i.RateCardDiscounts.ValidateForPrice(price); err != nil { + errs = append(errs, fmt.Errorf("rateCardDiscounts: %w", err)) + } + + return errors.Join(errs...) +} + +func (i DetailedLine) ValidateFee() error { + var errs []error + + if i.FlatFee.PerUnitAmount.IsNegative() { + errs = append(errs, errors.New("price should be positive or zero")) + } + + if i.FlatFee.Quantity.IsNegative() { + errs = append(errs, errors.New("quantity should be positive or zero")) + } + + if !slices.Contains(FlatFeeCategory("").Values(), string(i.FlatFee.Category)) { + errs = append(errs, fmt.Errorf("invalid category %s", i.FlatFee.Category)) + } + + if !slices.Contains(productcatalog.PaymentTermType("").Values(), string(i.FlatFee.PaymentTerm)) { + errs = append(errs, fmt.Errorf("invalid payment term %s", i.FlatFee.PaymentTerm)) + } + + return errors.Join(errs...) +} + +// helper functions for generating new lines +type NewFlatFeeLineInput struct { + ID string + CreatedAt time.Time + UpdatedAt time.Time + + Namespace string + Period Period + InvoiceAt time.Time + + InvoiceID string + + Name string + Metadata map[string]string + Annotations models.Annotations + Description *string + + Currency currencyx.Code + + ManagedBy InvoiceLineManagedBy + + PerUnitAmount alpacadecimal.Decimal + PaymentTerm productcatalog.PaymentTermType + + RateCardDiscounts Discounts +} + type usageBasedLineOptions struct { featureKey string } @@ -664,8 +708,7 @@ func WithFeatureKey(fk string) usageBasedLineOption { } } -// NewUsageBasedFlatFeeLine creates a new usage based flat fee line (which is semantically equivalent to the line returned by -// NewFlatFeeLine, but based on the usage based line semantic). +// NewUsageBasedFlatFeeLine creates a new usage based flat fee line. // // Note: this is temporary in it's current form until we validate the usage based flat fee schema func NewUsageBasedFlatFeeLine(input NewFlatFeeLineInput, opts ...usageBasedLineOption) *Line { @@ -692,16 +735,12 @@ func NewUsageBasedFlatFeeLine(input NewFlatFeeLineInput, opts ...usageBasedLineO Metadata: input.Metadata, Annotations: input.Annotations, - Status: InvoiceLineStatusValid, - - Type: InvoiceLineTypeUsageBased, - ManagedBy: lo.CoalesceOrEmpty(input.ManagedBy, SystemManagedLine), Currency: input.Currency, RateCardDiscounts: input.RateCardDiscounts, }, - UsageBased: &UsageBasedLine{ + UsageBased: UsageBasedLine{ Price: productcatalog.NewPriceFrom(productcatalog.FlatPrice{ Amount: input.PerUnitAmount, PaymentTerm: input.PaymentTerm, @@ -713,9 +752,9 @@ func NewUsageBasedFlatFeeLine(input NewFlatFeeLineInput, opts ...usageBasedLineO } // TODO[OM-1016]: For events we need a json marshaler -type LineChildren []*Line +type LineChildren []DetailedLine -func NewLineChildren(children []*Line) LineChildren { +func NewLineChildren(children []DetailedLine) LineChildren { // Note: this helps with test equality checks if len(children) == 0 { children = nil @@ -725,47 +764,47 @@ func NewLineChildren(children []*Line) LineChildren { } func (c LineChildren) Validate() error { - return errors.Join(lo.Map(c, func(line *Line, idx int) error { + return errors.Join(lo.Map(c, func(line DetailedLine, idx int) error { return ValidationWithFieldPrefix(fmt.Sprintf("%d", idx), line.Validate()) })...) } -func (c LineChildren) GetByID(id string) *Line { - return lo.FindOrElse(c, nil, func(line *Line) bool { +func (c LineChildren) GetByID(id string) (DetailedLine, bool) { + return lo.Find(c, func(line DetailedLine) bool { return line.ID == id }) } func (c *LineChildren) RemoveByID(id string) bool { - toBeRemoved := c.GetByID(id) - if toBeRemoved == nil { + _, found := c.GetByID(id) + if !found { return false } - *c = lo.Filter(*c, func(l *Line, _ int) bool { + *c = lo.Filter(*c, func(l DetailedLine, _ int) bool { return l.ID != id }) return true } -func (c LineChildren) GetByChildUniqueReferenceID(id string) *Line { - return lo.FindOrElse(c, nil, func(line *Line) bool { +func (c LineChildren) GetByChildUniqueReferenceID(id string) (DetailedLine, bool) { + return lo.Find(c, func(line DetailedLine) bool { return lo.FromPtr(line.ChildUniqueReferenceID) == id }) } +// TODO: Use ReuseIDsFrom instead // ChildrenWithIDReuse returns a new LineChildren instance with the given lines. If the line has a child // with a unique reference ID, it will try to retain the database ID of the existing child to avoid a delete/create. -func (c Line) ChildrenWithIDReuse(l []*Line) (LineChildren, error) { - clonedNewLines := lo.Map(l, func(line *Line, _ int) *Line { +func (c LineChildren) ChildrenWithIDReuse(l []DetailedLine, parentID string) (LineChildren, error) { + clonedNewLines := lo.Map(l, func(line DetailedLine, _ int) DetailedLine { return line.Clone() }) - existingItems := c.Children - childrenRefToLine := make(map[string]*Line, len(existingItems)) + childrenRefToLine := make(map[string]DetailedLine, len(c)) - for _, child := range existingItems { + for _, child := range c { if child.ChildUniqueReferenceID == nil { continue } @@ -774,7 +813,7 @@ func (c Line) ChildrenWithIDReuse(l []*Line) (LineChildren, error) { } for _, newChild := range clonedNewLines { - newChild.ParentLineID = lo.ToPtr(c.ID) + newChild.ParentLineID = lo.ToPtr(parentID) if newChild.ChildUniqueReferenceID == nil { continue @@ -789,12 +828,7 @@ func (c Line) ChildrenWithIDReuse(l []*Line) (LineChildren, error) { newChild.CreatedAt = existing.CreatedAt newChild.UpdatedAt = existing.UpdatedAt - discountsWithIDReuse, err := newChild.Discounts.ReuseIDsFrom(existing.Discounts) - if err != nil { - return LineChildren{}, fmt.Errorf("failed to reuse discount ids: %w", err) - } - - newChild.Discounts = discountsWithIDReuse + newChild.AmountDiscounts = newChild.AmountDiscounts.ReuseIDsFrom(existing.AmountDiscounts) } } @@ -816,11 +850,7 @@ type UsageBasedLine struct { MeteredPreLinePeriodQuantity *alpacadecimal.Decimal `json:"meteredPreLinePeriodQuantity,omitempty"` } -func (i UsageBasedLine) Equal(other *UsageBasedLine) bool { - if other == nil { - return false - } - +func (i UsageBasedLine) Equal(other UsageBasedLine) bool { if !i.Price.Equal(other.Price) { return false } @@ -848,10 +878,6 @@ func (i UsageBasedLine) Equal(other *UsageBasedLine) bool { return true } -func (i UsageBasedLine) Clone() *UsageBasedLine { - return &i -} - func (i UsageBasedLine) Validate() error { var errs []error @@ -993,11 +1019,9 @@ type UpdateInvoiceLineAdapterInput Line type UpdateInvoiceLineInput struct { // Mandatory fields for update Line LineID - Type InvoiceLineType LineBase UpdateInvoiceLineBaseInput UsageBased UpdateInvoiceLineUsageBasedInput - FlatFee UpdateInvoiceLineFlatFeeInput } func (u UpdateInvoiceLineInput) Validate() error { @@ -1010,22 +1034,8 @@ func (u UpdateInvoiceLineInput) Validate() error { outErr = errors.Join(outErr, fmt.Errorf("validating LineID: %w", err)) } - if !slices.Contains(u.Type.Values(), string(u.Type)) { - outErr = errors.Join(outErr, ValidationWithFieldPrefix( - "type", fmt.Errorf("line base: invalid type %s", u.Type), - )) - return outErr - } - - switch u.Type { - case InvoiceLineTypeUsageBased: - if err := u.UsageBased.Validate(); err != nil { - outErr = errors.Join(outErr, err) - } - case InvoiceLineTypeFee: - if err := u.FlatFee.Validate(); err != nil { - outErr = errors.Join(outErr, err) - } + if err := u.UsageBased.Validate(); err != nil { + outErr = errors.Join(outErr, err) } return outErr @@ -1040,23 +1050,12 @@ func (u UpdateInvoiceLineInput) Apply(l *Line) (*Line, error) { // however in this specific case we don't care about that, so we just copy it over l.ParentLine = oldParentLine - if u.Type != l.Type { - return l, fmt.Errorf("line type cannot be changed") - } - if err := u.LineBase.Apply(l); err != nil { return l, err } - switch l.Type { - case InvoiceLineTypeUsageBased: - if err := u.UsageBased.Apply(l.UsageBased); err != nil { - return l, err - } - case InvoiceLineTypeFee: - if err := u.FlatFee.Apply(l.FlatFee); err != nil { - return l, err - } + if err := u.UsageBased.Apply(&l.UsageBased); err != nil { + return l, err } return l, nil diff --git a/openmeter/billing/invoicelinediscount.go b/openmeter/billing/invoicelinediscount.go index 0c8315ae11..d033722ce1 100644 --- a/openmeter/billing/invoicelinediscount.go +++ b/openmeter/billing/invoicelinediscount.go @@ -48,6 +48,10 @@ func (i LineDiscountBase) GetChildUniqueReferenceID() *string { return i.ChildUniqueReferenceID } +func (i LineDiscountBase) GetDescription() *string { + return i.Description +} + type LineDiscountBaseManaged struct { models.ManagedModelWithID `json:",inline"` LineDiscountBase `json:",inline"` @@ -202,6 +206,30 @@ func (i AmountLineDiscountsManaged) Mutate(mutator func(AmountLineDiscountManage return cloned, nil } +func (i AmountLineDiscountsManaged) Validate() error { + return errors.Join(lo.Map(i, func(item AmountLineDiscountManaged, _ int) error { + return item.Validate() + })...) +} + +func (i AmountLineDiscountsManaged) ReuseIDsFrom(existingItems AmountLineDiscountsManaged) AmountLineDiscountsManaged { + return reuseIDsFrom(i, existingItems) +} + +func (i *AmountLineDiscountsManaged) SetDiscountExternalIDs(externalIDs map[string]string) []string { + foundIDs := []string{} + + for idx := range *i { + discount := &(*i)[idx] + if externalID, ok := externalIDs[discount.ID]; ok { + discount.ExternalIDs.Invoicing = externalID + foundIDs = append(foundIDs, discount.ID) + } + } + + return foundIDs +} + type UsageLineDiscount struct { LineDiscountBase `json:",inline"` @@ -390,21 +418,11 @@ func (i LineDiscounts) Validate() error { return models.NewNillableGenericValidationError(errors.Join(errs...)) } -func (i LineDiscounts) ReuseIDsFrom(existingItems LineDiscounts) (LineDiscounts, error) { - amounts, err := ReuseIDsFrom(i.Amount, existingItems.Amount) - if err != nil { - return LineDiscounts{}, err - } - - usages, err := ReuseIDsFrom(i.Usage, existingItems.Usage) - if err != nil { - return LineDiscounts{}, err - } - +func (i LineDiscounts) ReuseIDsFrom(existingItems LineDiscounts) LineDiscounts { return LineDiscounts{ - Amount: amounts, - Usage: usages, - }, nil + Amount: reuseIDsFrom(i.Amount, existingItems.Amount), + Usage: reuseIDsFrom(i.Usage, existingItems.Usage), + } } func (i LineDiscounts) IsEmpty() bool { @@ -417,10 +435,10 @@ type entityWithReusableIDs[T any] interface { WithManagedFieldsWithID(models.ManagedModelWithID) T } -// ReuseIDsFrom reuses the IDs of the existing discounts by child unique reference ID. -func ReuseIDsFrom[T entityWithReusableIDs[T]](currentItems []T, dbExistingItems []T) ([]T, error) { +// reuseIDsFrom reuses the IDs of the existing discounts by child unique reference ID. +func reuseIDsFrom[T entityWithReusableIDs[T]](currentItems []T, dbExistingItems []T) []T { if len(currentItems) == 0 { - return nil, nil + return nil } existingItemsByUniqueReference := lo.GroupBy( @@ -432,19 +450,19 @@ func ReuseIDsFrom[T entityWithReusableIDs[T]](currentItems []T, dbExistingItems }, ) - discountsWithIDReuse, err := slicesx.MapWithErr(currentItems, func(discount T) (T, error) { + discountsWithIDReuse := lo.Map(currentItems, func(discount T, _ int) T { childUniqueReferenceID := discount.GetChildUniqueReferenceID() // We should not reuse the ID if they are for a different child unique reference ID if childUniqueReferenceID == nil { - return discount, nil + return discount } existingItems, ok := existingItemsByUniqueReference[*childUniqueReferenceID] if !ok { // We did not find any existing items for this child unique reference ID, // let's create a new entry in the DB. - return discount, nil + return discount } existingManagedFields := existingItems[0].GetManagedFieldsWithID() @@ -456,11 +474,8 @@ func ReuseIDsFrom[T entityWithReusableIDs[T]](currentItems []T, dbExistingItems // UpdatedAt is updated by the adapter layer // DeletedAt should not be set, to ensure that we are not carrying over soft-deletion flags }, - }), nil + }) }) - if err != nil { - return nil, err - } - return slicesx.EmptyAsNil(discountsWithIDReuse), nil + return slicesx.EmptyAsNil(discountsWithIDReuse) } diff --git a/openmeter/billing/service/invoice.go b/openmeter/billing/service/invoice.go index 6f98e35f30..088fdbb362 100644 --- a/openmeter/billing/service/invoice.go +++ b/openmeter/billing/service/invoice.go @@ -153,7 +153,7 @@ func (s *Service) recalculateGatheringInvoice(ctx context.Context, in recalculat inScopeLineSvcs, err := s.lineService.FromEntities( lo.Filter(invoice.Lines.OrEmpty(), func(line *billing.Line, _ int) bool { - return line.Status == billing.InvoiceLineStatusValid && line.DeletedAt == nil + return !line.IsDeleted() }), ) if err != nil { @@ -1005,7 +1005,7 @@ func (s Service) updateInvoice(ctx context.Context, in billing.UpdateInvoiceAdap func (s Service) checkIfLinesAreInvoicable(ctx context.Context, invoice *billing.Invoice, progressiveBilling bool) error { inScopeLineServices, err := s.lineService.FromEntities( lo.Filter(invoice.Lines.OrEmpty(), func(line *billing.Line, _ int) bool { - return line.Status == billing.InvoiceLineStatusValid && line.DeletedAt == nil + return !line.IsDeleted() }), ) if err != nil { diff --git a/openmeter/billing/service/invoicecalc/gatheringrealtime.go b/openmeter/billing/service/invoicecalc/gatheringrealtime.go index abdaeb23ae..3cc897bb2a 100644 --- a/openmeter/billing/service/invoicecalc/gatheringrealtime.go +++ b/openmeter/billing/service/invoicecalc/gatheringrealtime.go @@ -14,7 +14,7 @@ import ( // manually. func FillGatheringDetailedLineMeta(invoice *billing.Invoice, deps CalculatorDependencies) error { invoice.Lines = invoice.Lines.Map(func(line *billing.Line) *billing.Line { - line.Children = lo.Map(line.Children, func(child *billing.Line, _ int) *billing.Line { + line.Children = lo.Map(line.Children, func(child billing.DetailedLine, _ int) billing.DetailedLine { if child.ID == "" { child.ID = ulid.Make().String() } diff --git a/openmeter/billing/service/invoicecalc/period.go b/openmeter/billing/service/invoicecalc/period.go index 4e49d3e2ba..5e8d519c73 100644 --- a/openmeter/billing/service/invoicecalc/period.go +++ b/openmeter/billing/service/invoicecalc/period.go @@ -7,7 +7,7 @@ func CalculateInvoicePeriod(invoice *billing.Invoice, deps CalculatorDependencie var period *billing.Period for _, line := range invoice.Lines.OrEmpty() { - if line.DeletedAt != nil || line.Status != billing.InvoiceLineStatusValid { + if line.IsDeleted() { continue } diff --git a/openmeter/billing/service/invoiceline.go b/openmeter/billing/service/invoiceline.go index c99cf7c6ca..e77f9c642d 100644 --- a/openmeter/billing/service/invoiceline.go +++ b/openmeter/billing/service/invoiceline.go @@ -23,7 +23,6 @@ var _ billing.InvoiceLineService = (*Service)(nil) func (s *Service) CreatePendingInvoiceLines(ctx context.Context, input billing.CreatePendingInvoiceLinesInput) (*billing.CreatePendingInvoiceLinesResult, error) { for i := range input.Lines { input.Lines[i].Namespace = input.Customer.Namespace - input.Lines[i].Status = billing.InvoiceLineStatusValid input.Lines[i].Currency = input.Currency } @@ -59,7 +58,6 @@ func (s *Service) CreatePendingInvoiceLines(ctx context.Context, input billing.C return transcationForInvoiceManipulation(ctx, s, input.Customer, func(ctx context.Context) (*billing.CreatePendingInvoiceLinesResult, error) { lineServices, err := s.lineService.FromEntities(lo.Map(input.Lines, func(l *billing.Line, _ int) *billing.Line { l.Namespace = input.Customer.Namespace - l.Status = billing.InvoiceLineStatusValid l.Currency = input.Currency return l diff --git a/openmeter/billing/service/lineservice/detailedlines.go b/openmeter/billing/service/lineservice/detailedlines.go index 7a293a2e88..70fcc7a9dc 100644 --- a/openmeter/billing/service/lineservice/detailedlines.go +++ b/openmeter/billing/service/lineservice/detailedlines.go @@ -23,7 +23,7 @@ type newDetailedLineInput struct { PaymentTerm productcatalog.PaymentTermType `json:"paymentTerm,omitempty"` Category billing.FlatFeeCategory `json:"category,omitempty"` - Discounts billing.LineDiscounts `json:"discounts,omitempty"` + AmountDiscounts billing.AmountLineDiscountsManaged `json:"amountDiscounts,omitempty"` } func (i newDetailedLineInput) Validate() error { @@ -51,7 +51,7 @@ func (i newDetailedLineInput) TotalAmount(currency currencyx.Calculator) alpacad Currency: currency, PerUnitAmount: i.PerUnitAmount, Quantity: i.Quantity, - Discounts: i.Discounts, + Discounts: i.AmountDiscounts, }) } @@ -59,13 +59,13 @@ type getTotalAmountInput struct { Currency currencyx.Calculator PerUnitAmount alpacadecimal.Decimal Quantity alpacadecimal.Decimal - Discounts billing.LineDiscounts + Discounts billing.AmountLineDiscountsManaged } func TotalAmount(in getTotalAmountInput) alpacadecimal.Decimal { total := in.Currency.RoundToPrecision(in.PerUnitAmount.Mul(in.Quantity)) - total = total.Sub(in.Discounts.Amount.SumAmount(in.Currency)) + total = total.Sub(in.Discounts.SumAmount(in.Currency)) return total } @@ -92,7 +92,7 @@ func (i newDetailedLineInput) AddDiscountForOverage(in addDiscountInput) newDeta if totalBillableAmount.GreaterThanOrEqual(normalizedMaxSpend) && in.BilledAmountBeforeLine.GreaterThanOrEqual(normalizedMaxSpend) { // 100% discount - i.Discounts.Amount = append(i.Discounts.Amount, billing.AmountLineDiscountManaged{ + i.AmountDiscounts = append(i.AmountDiscounts, billing.AmountLineDiscountManaged{ AmountLineDiscount: billing.AmountLineDiscount{ Amount: lineTotal, LineDiscountBase: billing.LineDiscountBase{ @@ -106,7 +106,7 @@ func (i newDetailedLineInput) AddDiscountForOverage(in addDiscountInput) newDeta } discountAmount := totalBillableAmount.Sub(normalizedMaxSpend) - i.Discounts.Amount = append(i.Discounts.Amount, billing.AmountLineDiscountManaged{ + i.AmountDiscounts = append(i.AmountDiscounts, billing.AmountLineDiscountManaged{ AmountLineDiscount: billing.AmountLineDiscount{ Amount: discountAmount, LineDiscountBase: billing.LineDiscountBase{ @@ -120,10 +120,10 @@ func (i newDetailedLineInput) AddDiscountForOverage(in addDiscountInput) newDeta return i } -func newDetailedLines(line *billing.Line, inputs ...newDetailedLineInput) ([]*billing.Line, error) { - return slicesx.MapWithErr(inputs, func(in newDetailedLineInput) (*billing.Line, error) { +func newDetailedLines(line *billing.Line, inputs ...newDetailedLineInput) ([]billing.DetailedLine, error) { + return slicesx.MapWithErr(inputs, func(in newDetailedLineInput) (billing.DetailedLine, error) { if err := in.Validate(); err != nil { - return nil, err + return billing.DetailedLine{}, err } period := line.Period @@ -135,14 +135,12 @@ func newDetailedLines(line *billing.Line, inputs ...newDetailedLineInput) ([]*bi in.Category = billing.FlatFeeCategoryRegular } - line := &billing.Line{ + line := billing.DetailedLine{ LineBase: billing.LineBase{ ManagedResource: models.NewManagedResource(models.ManagedResourceInput{ Namespace: line.Namespace, Name: in.Name, }), - Type: billing.InvoiceLineTypeFee, - Status: billing.InvoiceLineStatusDetailed, Period: period, ManagedBy: billing.SystemManagedLine, InvoiceAt: line.InvoiceAt, @@ -152,17 +150,17 @@ func newDetailedLines(line *billing.Line, inputs ...newDetailedLineInput) ([]*bi ParentLineID: lo.ToPtr(line.ID), TaxConfig: line.TaxConfig, }, - FlatFee: &billing.FlatFeeLine{ + FlatFee: billing.FlatFeeLine{ PaymentTerm: lo.CoalesceOrEmpty(in.PaymentTerm, productcatalog.InArrearsPaymentTerm), PerUnitAmount: in.PerUnitAmount, Quantity: in.Quantity, Category: in.Category, }, - Discounts: in.Discounts, + AmountDiscounts: in.AmountDiscounts, } if err := line.Validate(); err != nil { - return nil, err + return billing.DetailedLine{}, err } return line, nil @@ -192,7 +190,7 @@ func mergeDetailedLines(line *billing.Line, in newDetailedLinesInput) error { detailedLines[idx].FlatFee.Index = lo.ToPtr(idx) } - childrenWithIDReuse, err := line.ChildrenWithIDReuse(detailedLines) + childrenWithIDReuse, err := line.Children.ChildrenWithIDReuse(detailedLines, line.ID) if err != nil { return fmt.Errorf("failed to reuse child IDs: %w", err) } @@ -201,3 +199,35 @@ func mergeDetailedLines(line *billing.Line, in newDetailedLinesInput) error { return nil } + +func calculateDetailedLineTotals(line billing.DetailedLine) (billing.Totals, error) { + // Calculate the line totals + calc, err := line.Currency.Calculator() + if err != nil { + return billing.Totals{}, err + } + + // Calculate the line totals + totals := billing.Totals{ + DiscountsTotal: line.AmountDiscounts.SumAmount(calc), + + // TODO[OM-979]: implement taxes + TaxesInclusiveTotal: alpacadecimal.Zero, + TaxesExclusiveTotal: alpacadecimal.Zero, + TaxesTotal: alpacadecimal.Zero, + } + + amount := calc.RoundToPrecision(line.FlatFee.PerUnitAmount.Mul(line.FlatFee.Quantity)) + + switch line.FlatFee.Category { + case billing.FlatFeeCategoryCommitment: + totals.ChargesTotal = amount + default: + totals.Amount = amount + } + + totals.Total = totals.CalculateTotal() + + line.Totals = totals + return totals, nil +} diff --git a/openmeter/billing/service/lineservice/discountpercentage.go b/openmeter/billing/service/lineservice/discountpercentage.go index fab1c13bc0..6e5c3ae45d 100644 --- a/openmeter/billing/service/lineservice/discountpercentage.go +++ b/openmeter/billing/service/lineservice/discountpercentage.go @@ -36,7 +36,7 @@ func (m *discountPercentageMutator) Mutate(i PricerCalculateInput, pricerResult return newDetailedLineInput{}, err } - l.Discounts.Amount = append(l.Discounts.Amount, lineDiscount) + l.AmountDiscounts = append(l.AmountDiscounts, lineDiscount) return l, nil }) if err != nil { diff --git a/openmeter/billing/service/lineservice/feeline.go b/openmeter/billing/service/lineservice/feeline.go deleted file mode 100644 index 3584c4b51f..0000000000 --- a/openmeter/billing/service/lineservice/feeline.go +++ /dev/null @@ -1,126 +0,0 @@ -package lineservice - -import ( - "context" - - "github.com/alpacahq/alpacadecimal" - - "github.com/openmeterio/openmeter/openmeter/billing" -) - -var _ Line = (*feeLine)(nil) - -type feeLine struct { - lineBase -} - -func (l feeLine) PrepareForCreate(context.Context) (Line, error) { - return &l, nil -} - -func (l feeLine) CanBeInvoicedAsOf(_ context.Context, in CanBeInvoicedAsOfInput) (*billing.Period, error) { - // TODO[OM-1085]: Prorate can be implemented here for progressive billing/pro-rating of the fee - - if !in.AsOf.Before(l.line.InvoiceAt) { - return &l.line.Period, nil - } - - return nil, nil -} - -func (l feeLine) SnapshotQuantity(context.Context, billing.InvoiceCustomer) error { - return nil -} - -func (l feeLine) CalculateDetailedLines() error { - // Fee lines only have percentage discounts, but no commitments, so it's fine to not to reuse the whole - // middleware line for now. - pctDiscount, err := l.getPercentageDiscounts() - if err != nil { - return err - } - - // The merge should happen in an idempotent way, or we end up with multiple discounts for the same line - // due to recalculations. - - targetDiscountState := billing.LineDiscounts{} - - if pctDiscount != nil { - targetDiscountState.Amount = append(targetDiscountState.Amount, *pctDiscount) - } - - l.line.Discounts, err = targetDiscountState.ReuseIDsFrom(l.line.Discounts) - if err != nil { - return err - } - - return nil -} - -func (l feeLine) getPercentageDiscounts() (*billing.AmountLineDiscountManaged, error) { - discountPercentageMutator := discountPercentageMutator{} - - discount, err := discountPercentageMutator.getDiscount(l.line.RateCardDiscounts) - if err != nil { - return nil, err - } - - if discount == nil { - return nil, nil - } - - currencyCalc, err := l.line.Currency.Calculator() - if err != nil { - return nil, err - } - - amount := TotalAmount(getTotalAmountInput{ - Currency: currencyCalc, - PerUnitAmount: l.line.FlatFee.PerUnitAmount, - Quantity: l.line.FlatFee.Quantity, - }) - - lineDiscount, err := discountPercentageMutator.getLineDiscount(amount, currencyCalc, *discount) - if err != nil { - return nil, err - } - - return &lineDiscount, nil -} - -func (l *feeLine) UpdateTotals() error { - // Calculate the line totals - calc, err := l.line.Currency.Calculator() - if err != nil { - return err - } - - // Calculate the line totals - totals := billing.Totals{ - DiscountsTotal: l.line.Discounts.Amount.SumAmount(calc), - - // TODO[OM-979]: implement taxes - TaxesInclusiveTotal: alpacadecimal.Zero, - TaxesExclusiveTotal: alpacadecimal.Zero, - TaxesTotal: alpacadecimal.Zero, - } - - amount := calc.RoundToPrecision(l.line.FlatFee.PerUnitAmount.Mul(l.line.FlatFee.Quantity)) - - switch l.line.FlatFee.Category { - case billing.FlatFeeCategoryCommitment: - totals.ChargesTotal = amount - default: - totals.Amount = amount - } - - totals.Total = totals.CalculateTotal() - - l.line.LineBase.Totals = totals - return nil -} - -func (l feeLine) IsPeriodEmptyConsideringTruncations() bool { - // Fee lines are not subject to truncation, and for now they can be empty (one time fees) - return false -} diff --git a/openmeter/billing/service/lineservice/feeline_test.go b/openmeter/billing/service/lineservice/feeline_test.go deleted file mode 100644 index 536eb7758a..0000000000 --- a/openmeter/billing/service/lineservice/feeline_test.go +++ /dev/null @@ -1,92 +0,0 @@ -package lineservice - -import ( - "encoding/json" - "testing" - "time" - - "github.com/alpacahq/alpacadecimal" - "github.com/samber/lo" - "github.com/stretchr/testify/require" - - "github.com/openmeterio/openmeter/openmeter/billing" - "github.com/openmeterio/openmeter/openmeter/productcatalog" - "github.com/openmeterio/openmeter/pkg/models" -) - -func TestFeeLine(t *testing.T) { - t.Run("should apply discount percentage", func(t *testing.T) { - line := generateFeeLine(t, generateFeeLineInput{ - Quantity: 1, - Amount: 100, - RateCardDiscount: billing.PercentageDiscount{ - PercentageDiscount: productcatalog.PercentageDiscount{ - Percentage: models.NewPercentage(50), - }, - CorrelationID: "example-correlation-id", - }, - }) - - require.NoError(t, line.CalculateDetailedLines()) - - ExpectJSONEqual(t, billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(50), - LineDiscountBase: billing.LineDiscountBase{ - Reason: billing.NewDiscountReasonFrom(billing.PercentageDiscount{ - PercentageDiscount: productcatalog.PercentageDiscount{ - Percentage: models.NewPercentage(50), - }, - CorrelationID: "example-correlation-id", - }), - ChildUniqueReferenceID: lo.ToPtr("rateCardDiscount/correlationID=example-correlation-id"), - }, - }, - }, - }, - }, line.line.Discounts) - }) -} - -type generateFeeLineInput struct { - Quantity float64 - Amount float64 - RateCardDiscount billing.PercentageDiscount -} - -func generateFeeLine(t *testing.T, in generateFeeLineInput) *feeLine { - return &feeLine{ - lineBase: lineBase{ - line: &billing.Line{ - LineBase: billing.LineBase{ - Currency: "USD", - Period: billing.Period{ - Start: time.Now(), - End: time.Now().Add(time.Hour * 24), - }, - RateCardDiscounts: billing.Discounts{ - Percentage: lo.ToPtr(in.RateCardDiscount.Clone()), - }, - }, - FlatFee: &billing.FlatFeeLine{ - PerUnitAmount: alpacadecimal.NewFromFloat(in.Amount), - Quantity: alpacadecimal.NewFromFloat(in.Quantity), - }, - }, - }, - } -} - -func ExpectJSONEqual(t *testing.T, exp, actual any) { - t.Helper() - - aJSON, err := json.Marshal(exp) - require.NoError(t, err) - - bJSON, err := json.Marshal(actual) - require.NoError(t, err) - - require.JSONEq(t, string(aJSON), string(bJSON)) -} diff --git a/openmeter/billing/service/lineservice/linebase.go b/openmeter/billing/service/lineservice/linebase.go index 64998cd444..8caf82c7ab 100644 --- a/openmeter/billing/service/lineservice/linebase.go +++ b/openmeter/billing/service/lineservice/linebase.go @@ -37,7 +37,6 @@ type LineBase interface { InvoiceID() string Currency() currencyx.Code Period() billing.Period - Status() billing.InvoiceLineStatus // IsLastInPeriod returns true if the line is the last line in the period that is going to be invoiced. IsLastInPeriod() bool IsDeleted() bool @@ -61,6 +60,7 @@ type LineBase interface { var _ LineBase = (*lineBase)(nil) +// TODO[later]: remove LineBase as we don't have multiple line types anymore type lineBase struct { line *billing.Line service *Service @@ -91,10 +91,6 @@ func (l lineBase) Period() billing.Period { return l.line.Period } -func (l lineBase) Status() billing.InvoiceLineStatus { - return l.line.Status -} - func (l lineBase) IsSplitLineGroupMember() bool { return l.line.SplitLineGroupID != nil } @@ -197,10 +193,6 @@ func (l lineBase) Update(in UpdateInput) Line { l.line.InvoiceAt = in.InvoiceAt } - if in.Status != "" { - l.line.Status = in.Status - } - if in.PreventChildChanges { l.line.Children = billing.LineChildren{} } @@ -221,21 +213,12 @@ func (l lineBase) Update(in UpdateInput) Line { // TODO[later]: We should rely on UpsertInvoiceLines and do this in bulk. func (l lineBase) Split(ctx context.Context, splitAt time.Time) (SplitResult, error) { - // We only split valid lines; split etc. lines are not supported - if l.line.Status != billing.InvoiceLineStatusValid { - return SplitResult{}, fmt.Errorf("line[%s]: line is not valid", l.line.ID) - } - if !l.line.Period.Contains(splitAt) { return SplitResult{}, fmt.Errorf("line[%s]: splitAt is not within the line period", l.line.ID) } var splitLineGroupID string if !l.IsSplitLineGroupMember() { - if l.line.Type != billing.InvoiceLineTypeUsageBased { - return SplitResult{}, fmt.Errorf("line[%s]: split is only supported for usage based lines", l.line.ID) - } - splitLineGroup, err := l.service.BillingAdapter.CreateSplitLineGroup(ctx, billing.CreateSplitLineGroupAdapterInput{ Namespace: l.line.Namespace, diff --git a/openmeter/billing/service/lineservice/pricedynamic_test.go b/openmeter/billing/service/lineservice/pricedynamic_test.go index a2ab4a429c..43348d67f9 100644 --- a/openmeter/billing/service/lineservice/pricedynamic_test.go +++ b/openmeter/billing/service/lineservice/pricedynamic_test.go @@ -185,16 +185,14 @@ func TestDynamicPriceCalculation(t *testing.T) { Quantity: alpacadecimal.NewFromFloat(1), ChildUniqueReferenceID: UsageChildUniqueReferenceID, PaymentTerm: productcatalog.InArrearsPaymentTerm, - Discounts: billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(60), - LineDiscountBase: billing.LineDiscountBase{ - Description: lo.ToPtr("Maximum spend discount for charges over 100"), - ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), - Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), - }, + AmountDiscounts: billing.AmountLineDiscountsManaged{ + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(60), + LineDiscountBase: billing.LineDiscountBase{ + Description: lo.ToPtr("Maximum spend discount for charges over 100"), + ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), + Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), }, }, }, diff --git a/openmeter/billing/service/lineservice/pricegraduatedtiered_test.go b/openmeter/billing/service/lineservice/pricegraduatedtiered_test.go index 767316162a..0ed1e8edd7 100644 --- a/openmeter/billing/service/lineservice/pricegraduatedtiered_test.go +++ b/openmeter/billing/service/lineservice/pricegraduatedtiered_test.go @@ -280,16 +280,14 @@ func TestTieredGraduatedCalculation(t *testing.T) { Quantity: alpacadecimal.NewFromFloat(3), ChildUniqueReferenceID: "graduated-tiered-3-price-usage", PaymentTerm: productcatalog.InArrearsPaymentTerm, - Discounts: billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(5), - LineDiscountBase: billing.LineDiscountBase{ - Description: lo.ToPtr("Maximum spend discount for charges over 170"), - ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), - Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), - }, + AmountDiscounts: billing.AmountLineDiscountsManaged{ + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(5), + LineDiscountBase: billing.LineDiscountBase{ + Description: lo.ToPtr("Maximum spend discount for charges over 170"), + ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), + Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), }, }, }, @@ -301,16 +299,14 @@ func TestTieredGraduatedCalculation(t *testing.T) { Quantity: alpacadecimal.NewFromFloat(7), ChildUniqueReferenceID: "graduated-tiered-4-price-usage", PaymentTerm: productcatalog.InArrearsPaymentTerm, - Discounts: billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(7), - LineDiscountBase: billing.LineDiscountBase{ - Description: lo.ToPtr("Maximum spend discount for charges over 170"), - ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), - Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), - }, + AmountDiscounts: billing.AmountLineDiscountsManaged{ + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(7), + LineDiscountBase: billing.LineDiscountBase{ + Description: lo.ToPtr("Maximum spend discount for charges over 170"), + ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), + Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), }, }, }, diff --git a/openmeter/billing/service/lineservice/pricepackage_test.go b/openmeter/billing/service/lineservice/pricepackage_test.go index e7532b93be..d4d44c8ef7 100644 --- a/openmeter/billing/service/lineservice/pricepackage_test.go +++ b/openmeter/billing/service/lineservice/pricepackage_test.go @@ -240,16 +240,14 @@ func TestPackagePriceCalculation(t *testing.T) { Quantity: alpacadecimal.NewFromFloat(5), ChildUniqueReferenceID: UsageChildUniqueReferenceID, PaymentTerm: productcatalog.InArrearsPaymentTerm, - Discounts: billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(65), - LineDiscountBase: billing.LineDiscountBase{ - Description: lo.ToPtr("Maximum spend discount for charges over 100"), - ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), - Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), - }, + AmountDiscounts: billing.AmountLineDiscountsManaged{ + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(65), + LineDiscountBase: billing.LineDiscountBase{ + Description: lo.ToPtr("Maximum spend discount for charges over 100"), + ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), + Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), }, }, }, diff --git a/openmeter/billing/service/lineservice/priceunit_test.go b/openmeter/billing/service/lineservice/priceunit_test.go index 6c1c0ae0ea..02e253b1b7 100644 --- a/openmeter/billing/service/lineservice/priceunit_test.go +++ b/openmeter/billing/service/lineservice/priceunit_test.go @@ -185,16 +185,14 @@ func TestUnitPriceCalculation(t *testing.T) { Quantity: alpacadecimal.NewFromFloat(5), ChildUniqueReferenceID: UnitPriceUsageChildUniqueReferenceID, PaymentTerm: productcatalog.InArrearsPaymentTerm, - Discounts: billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(20), - LineDiscountBase: billing.LineDiscountBase{ - Description: lo.ToPtr("Maximum spend discount for charges over 100"), - ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), - Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), - }, + AmountDiscounts: billing.AmountLineDiscountsManaged{ + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(20), + LineDiscountBase: billing.LineDiscountBase{ + Description: lo.ToPtr("Maximum spend discount for charges over 100"), + ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), + Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), }, }, }, @@ -246,25 +244,23 @@ func TestUnitPriceCalculation(t *testing.T) { Quantity: alpacadecimal.NewFromFloat(20), // 200 ChildUniqueReferenceID: UnitPriceUsageChildUniqueReferenceID, PaymentTerm: productcatalog.InArrearsPaymentTerm, - Discounts: billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(100), - LineDiscountBase: billing.LineDiscountBase{ - ChildUniqueReferenceID: lo.ToPtr("rateCardDiscount/correlationID=discount-50pct"), - Reason: billing.NewDiscountReasonFrom(discount50pct), - }, + AmountDiscounts: billing.AmountLineDiscountsManaged{ + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(100), + LineDiscountBase: billing.LineDiscountBase{ + ChildUniqueReferenceID: lo.ToPtr("rateCardDiscount/correlationID=discount-50pct"), + Reason: billing.NewDiscountReasonFrom(discount50pct), }, }, - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(35), - LineDiscountBase: billing.LineDiscountBase{ - Description: lo.ToPtr("Maximum spend discount for charges over 100"), - ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), - Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), - }, + }, + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(35), + LineDiscountBase: billing.LineDiscountBase{ + Description: lo.ToPtr("Maximum spend discount for charges over 100"), + ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), + Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), }, }, }, diff --git a/openmeter/billing/service/lineservice/pricevolumetiered_test.go b/openmeter/billing/service/lineservice/pricevolumetiered_test.go index 0a8768ccef..ad6deaa829 100644 --- a/openmeter/billing/service/lineservice/pricevolumetiered_test.go +++ b/openmeter/billing/service/lineservice/pricevolumetiered_test.go @@ -394,16 +394,14 @@ func TestTieredVolumeCalculation(t *testing.T) { Quantity: alpacadecimal.NewFromFloat(1), ChildUniqueReferenceID: VolumeFlatPriceChildUniqueReferenceID, PaymentTerm: productcatalog.InArrearsPaymentTerm, - Discounts: billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(25), - LineDiscountBase: billing.LineDiscountBase{ - Description: lo.ToPtr("Maximum spend discount for charges over 125"), - ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), - Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), - }, + AmountDiscounts: billing.AmountLineDiscountsManaged{ + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(25), + LineDiscountBase: billing.LineDiscountBase{ + Description: lo.ToPtr("Maximum spend discount for charges over 125"), + ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), + Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), }, }, }, diff --git a/openmeter/billing/service/lineservice/service.go b/openmeter/billing/service/lineservice/service.go index 0ee2540def..3a2e65315d 100644 --- a/openmeter/billing/service/lineservice/service.go +++ b/openmeter/billing/service/lineservice/service.go @@ -73,25 +73,15 @@ func (s *Service) FromEntity(line *billing.Line) (Line, error) { currency: currencyCalc, } - switch line.Type { - case billing.InvoiceLineTypeFee: - // Warning: These are actually the detailed lines, but the billing refactor is not yet complete - return &feeLine{ + if line.UsageBased.Price.Type() == productcatalog.FlatPriceType { + return &ubpFlatFeeLine{ lineBase: base, }, nil - case billing.InvoiceLineTypeUsageBased: - if line.UsageBased.Price.Type() == productcatalog.FlatPriceType { - return &ubpFlatFeeLine{ - lineBase: base, - }, nil - } - - return &usageBasedLine{ - lineBase: base, - }, nil - default: - return nil, fmt.Errorf("unsupported line type: %s", line.Type) } + + return &usageBasedLine{ + lineBase: base, + }, nil } func (s *Service) FromEntities(line []*billing.Line) (Lines, error) { @@ -155,19 +145,18 @@ func (s *Service) AssociateLinesToInvoice(ctx context.Context, invoice *billing. // UpdateTotalsFromDetailedLines is a helper method to update the totals of a line from its detailed lines. func (s *Service) UpdateTotalsFromDetailedLines(line *billing.Line) error { // Calculate the line totals - for _, line := range line.Children { - if line.DeletedAt != nil { + for idx := range line.Children { + detailedLine := &line.Children[idx] + + if detailedLine.IsDeleted() { continue } - lineSvc, err := s.FromEntity(line) + totals, err := calculateDetailedLineTotals(*detailedLine) if err != nil { - return fmt.Errorf("creating line service: %w", err) - } - - if err := lineSvc.UpdateTotals(); err != nil { - return fmt.Errorf("updating totals for line[%s]: %w", line.ID, err) + return fmt.Errorf("calculating totals for line[%s]: %w", line.ID, err) } + detailedLine.Totals = totals } // WARNING: Even if tempting to add discounts etc. here to the totals, we should always keep the logic as is. @@ -179,9 +168,9 @@ func (s *Service) UpdateTotalsFromDetailedLines(line *billing.Line) error { // UBP line's value is the sum of all the children res := billing.Totals{} - res = res.Add(lo.Map(line.Children, func(l *billing.Line, _ int) billing.Totals { + res = res.Add(lo.Map(line.Children, func(l billing.DetailedLine, _ int) billing.Totals { // Deleted lines are not contributing to the totals - if l.DeletedAt != nil { + if l.IsDeleted() { return billing.Totals{} } diff --git a/openmeter/billing/service/lineservice/usagebasedline_test.go b/openmeter/billing/service/lineservice/usagebasedline_test.go index 527fb4268d..de85f91f56 100644 --- a/openmeter/billing/service/lineservice/usagebasedline_test.go +++ b/openmeter/billing/service/lineservice/usagebasedline_test.go @@ -55,11 +55,9 @@ func runUBPTest(t *testing.T, tc ubpCalculationTestCase) { Name: "feature", }), Currency: "USD", - Type: billing.InvoiceLineTypeUsageBased, - Status: billing.InvoiceLineStatusValid, RateCardDiscounts: tc.discounts, }, - UsageBased: &billing.UsageBasedLine{ + UsageBased: billing.UsageBasedLine{ Price: lo.ToPtr(tc.price), }, } @@ -196,16 +194,14 @@ func TestAddDiscountForOverage(t *testing.T) { require.Equal(t, newDetailedLineInput{ PerUnitAmount: alpacadecimal.NewFromFloat(100), Quantity: alpacadecimal.NewFromFloat(10), - Discounts: billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(0.01), - LineDiscountBase: billing.LineDiscountBase{ - Description: lo.ToPtr("Maximum spend discount for charges over 10000"), - ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), - Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), - }, + AmountDiscounts: billing.AmountLineDiscountsManaged{ + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(0.01), + LineDiscountBase: billing.LineDiscountBase{ + Description: lo.ToPtr("Maximum spend discount for charges over 10000"), + ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), + Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), }, }, }, @@ -224,16 +220,14 @@ func TestAddDiscountForOverage(t *testing.T) { require.Equal(t, newDetailedLineInput{ PerUnitAmount: alpacadecimal.NewFromFloat(100), Quantity: alpacadecimal.NewFromFloat(10), - Discounts: billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(600), - LineDiscountBase: billing.LineDiscountBase{ - Description: lo.ToPtr("Maximum spend discount for charges over 10000"), - ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), - Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), - }, + AmountDiscounts: billing.AmountLineDiscountsManaged{ + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(600), + LineDiscountBase: billing.LineDiscountBase{ + Description: lo.ToPtr("Maximum spend discount for charges over 10000"), + ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), + Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), }, }, }, @@ -252,16 +246,14 @@ func TestAddDiscountForOverage(t *testing.T) { require.Equal(t, newDetailedLineInput{ PerUnitAmount: alpacadecimal.NewFromFloat(100), Quantity: alpacadecimal.NewFromFloat(10), - Discounts: billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(1000), - LineDiscountBase: billing.LineDiscountBase{ - Description: lo.ToPtr("Maximum spend discount for charges over 10000"), - ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), - Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), - }, + AmountDiscounts: billing.AmountLineDiscountsManaged{ + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(1000), + LineDiscountBase: billing.LineDiscountBase{ + Description: lo.ToPtr("Maximum spend discount for charges over 10000"), + ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), + Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), }, }, }, @@ -280,16 +272,14 @@ func TestAddDiscountForOverage(t *testing.T) { require.Equal(t, newDetailedLineInput{ PerUnitAmount: alpacadecimal.NewFromFloat(100), Quantity: alpacadecimal.NewFromFloat(10), - Discounts: billing.LineDiscounts{ - Amount: []billing.AmountLineDiscountManaged{ - { - AmountLineDiscount: billing.AmountLineDiscount{ - Amount: alpacadecimal.NewFromFloat(1000), - LineDiscountBase: billing.LineDiscountBase{ - Description: lo.ToPtr("Maximum spend discount for charges over 10000"), - ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), - Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), - }, + AmountDiscounts: billing.AmountLineDiscountsManaged{ + { + AmountLineDiscount: billing.AmountLineDiscount{ + Amount: alpacadecimal.NewFromFloat(1000), + LineDiscountBase: billing.LineDiscountBase{ + Description: lo.ToPtr("Maximum spend discount for charges over 10000"), + ChildUniqueReferenceID: lo.ToPtr(billing.LineMaximumSpendReferenceID), + Reason: billing.NewDiscountReasonFrom(billing.MaximumSpendDiscount{}), }, }, }, diff --git a/openmeter/billing/worker/subscription/feehelper.go b/openmeter/billing/worker/subscription/feehelper.go index d33ee1bab5..aaf8243fdf 100644 --- a/openmeter/billing/worker/subscription/feehelper.go +++ b/openmeter/billing/worker/subscription/feehelper.go @@ -17,10 +17,7 @@ func isFlatFee(line *billing.Line) bool { return false } - if line.Type == billing.InvoiceLineTypeUsageBased && - line.UsageBased != nil && - line.UsageBased.Price != nil && - line.UsageBased.Price.Type() == productcatalog.FlatPriceType { + if line.UsageBased.Price != nil && line.UsageBased.Price.Type() == productcatalog.FlatPriceType { return true } @@ -32,11 +29,7 @@ func getFlatFeePerUnitAmount(line *billing.Line) (alpacadecimal.Decimal, error) return alpacadecimal.Zero, fmt.Errorf("line is nil") } - if line.Type != billing.InvoiceLineTypeUsageBased { - return alpacadecimal.Zero, fmt.Errorf("line is not a usage based line") - } - - if line.UsageBased == nil || line.UsageBased.Price == nil { + if line.UsageBased.Price == nil { return alpacadecimal.Zero, fmt.Errorf("line misses usage based metadata") } @@ -53,11 +46,7 @@ func setFlatFeePerUnitAmount(line *billing.Line, perUnitAmount alpacadecimal.Dec return fmt.Errorf("line is nil") } - if line.Type != billing.InvoiceLineTypeUsageBased { - return fmt.Errorf("line is not a usage based line") - } - - if line.UsageBased == nil || line.UsageBased.Price == nil { + if line.UsageBased.Price == nil { return fmt.Errorf("line misses usage based metadata") } diff --git a/openmeter/billing/worker/subscription/handlers.go b/openmeter/billing/worker/subscription/handlers.go index c956400814..2ba15e7c8b 100644 --- a/openmeter/billing/worker/subscription/handlers.go +++ b/openmeter/billing/worker/subscription/handlers.go @@ -50,8 +50,7 @@ func (h *Handler) HandleInvoiceCreation(ctx context.Context, event billing.Event affectedSubscriptions := lo.Uniq( lo.Map( lo.Filter(event.Invoice.Lines.OrEmpty(), func(line *billing.Line, _ int) bool { - return line.Status == billing.InvoiceLineStatusValid && - line.Subscription != nil + return line.Subscription != nil }), func(line *billing.Line, _ int) string { return line.Subscription.SubscriptionID diff --git a/openmeter/billing/worker/subscription/invoiceupdate.go b/openmeter/billing/worker/subscription/invoiceupdate.go index c1078b49c8..16ecc7c432 100644 --- a/openmeter/billing/worker/subscription/invoiceupdate.go +++ b/openmeter/billing/worker/subscription/invoiceupdate.go @@ -188,7 +188,7 @@ func (u *InvoiceUpdater) updateMutableInvoice(ctx context.Context, invoice billi } // update - if invoice.Status != billing.InvoiceStatusGathering && targetState.Type == billing.InvoiceLineTypeUsageBased { + if invoice.Status != billing.InvoiceStatusGathering { // We need to update the quantities of the usage based lines, to compensate for any changes in the period // of the line @@ -254,13 +254,6 @@ func (u *InvoiceUpdater) updateImmutableInvoice(ctx context.Context, invoice bil return fmt.Errorf("line[%s] not found in the invoice, cannot update", targetState.ID) } - if targetState.Type != existingLine.Type { - validationIssues = append(validationIssues, - newValidationIssueOnLine(existingLine, "line type cannot be changed (new type: %s)", targetState.Type), - ) - continue - } - if isFlatFee(targetState) { existingPerUnitAmount, err := getFlatFeePerUnitAmount(existingLine) if err != nil { @@ -282,10 +275,6 @@ func (u *InvoiceUpdater) updateImmutableInvoice(ctx context.Context, invoice bil continue } - if targetState.Type != billing.InvoiceLineTypeUsageBased { - return fmt.Errorf("line[%s] is not a usage based line, cannot update", targetState.ID) - } - if !targetState.Period.Truncate(streaming.MinimumWindowSizeDuration).Equal(existingLine.Period.Truncate(streaming.MinimumWindowSizeDuration)) { // The period of the line has changed => we need to refetch the quantity targetStateWithUpdatedQty, err := u.billingService.SnapshotLineQuantity(ctx, billing.SnapshotLineQuantityInput{ diff --git a/openmeter/billing/worker/subscription/suitebase_test.go b/openmeter/billing/worker/subscription/suitebase_test.go index 45132c019d..96e10c8eee 100644 --- a/openmeter/billing/worker/subscription/suitebase_test.go +++ b/openmeter/billing/worker/subscription/suitebase_test.go @@ -238,9 +238,7 @@ func (s *SuiteBase) expectLines(invoice billing.Invoice, subscriptionID string, s.NotNil(line) if expectedLine.Qty.IsPresent() { - if line.UsageBased == nil { - s.Failf("usage based line not found", "line not found with child id %s", childID) - } else if line.UsageBased.Quantity == nil { + if line.UsageBased.Quantity == nil { s.Failf("usage based line quantity not found", "line not found with child id %s", childID) } else { s.Equal(expectedLine.Qty.OrEmpty(), line.UsageBased.Quantity.InexactFloat64(), "%s: quantity", childID) @@ -248,7 +246,6 @@ func (s *SuiteBase) expectLines(invoice billing.Invoice, subscriptionID string, } if expectedLine.Price.IsPresent() { - s.Equal(billing.InvoiceLineTypeUsageBased, line.Type, "%s: line type", childID) s.Equal(*expectedLine.Price.OrEmpty(), *line.UsageBased.Price, "%s: price", childID) } diff --git a/openmeter/billing/worker/subscription/sync.go b/openmeter/billing/worker/subscription/sync.go index 0dc0dfa54d..a4d879b32c 100644 --- a/openmeter/billing/worker/subscription/sync.go +++ b/openmeter/billing/worker/subscription/sync.go @@ -595,7 +595,6 @@ func (h *Handler) lineFromSubscritionRateCard(subs subscription.SubscriptionView }), ManagedBy: billing.SubscriptionManagedLine, Currency: subs.Spec.Currency, - Status: billing.InvoiceLineStatusValid, ChildUniqueReferenceID: &item.UniqueID, TaxConfig: item.Spec.RateCard.AsMeta().TaxConfig, Period: item.ServicePeriod, @@ -641,8 +640,7 @@ func (h *Handler) lineFromSubscritionRateCard(subs subscription.SubscriptionView return nil, nil } - line.Type = billing.InvoiceLineTypeUsageBased - line.UsageBased = &billing.UsageBasedLine{ + line.UsageBased = billing.UsageBasedLine{ Price: productcatalog.NewPriceFrom(productcatalog.FlatPrice{ Amount: perUnitAmount, PaymentTerm: price.PaymentTerm, @@ -655,8 +653,7 @@ func (h *Handler) lineFromSubscritionRateCard(subs subscription.SubscriptionView return nil, fmt.Errorf("price must be defined for usage based price") } - line.Type = billing.InvoiceLineTypeUsageBased - line.UsageBased = &billing.UsageBasedLine{ + line.UsageBased = billing.UsageBasedLine{ Price: item.SubscriptionItem.RateCard.AsMeta().Price, FeatureKey: *item.SubscriptionItem.RateCard.AsMeta().FeatureKey, } diff --git a/pkg/entitydiff/diff.go b/pkg/entitydiff/diff.go new file mode 100644 index 0000000000..0ac58d72c0 --- /dev/null +++ b/pkg/entitydiff/diff.go @@ -0,0 +1,230 @@ +package entitydiff + +import ( + "errors" + + "github.com/samber/lo" + + "github.com/openmeterio/openmeter/pkg/equal" +) + +type Entity interface { + GetID() string + IsDeleted() bool +} + +type DiffUpdate[T Entity] struct { + DBState T + ExpectedState T +} + +type speculativeDiff[T Entity] struct { + UpdateCandidates []DiffUpdate[T] + Create []T + Delete []T +} + +type Diff[T Entity] struct { + Update []DiffUpdate[T] + Create []T + Delete []T +} + +func (d *Diff[T]) NeedsUpdate(item ...DiffUpdate[T]) { + d.Update = append(d.Update, item...) +} + +func (d *Diff[T]) NeedsCreate(item ...T) { + d.Create = append(d.Create, item...) +} + +func (d *Diff[T]) NeedsDelete(item ...T) { + d.Delete = append(d.Delete, item...) +} + +func (d *Diff[T]) Append(a Diff[T]) Diff[T] { + out := Diff[T]{ + Delete: make([]T, 0, len(a.Delete)+len(d.Delete)), + Update: make([]DiffUpdate[T], 0, len(a.Update)+len(d.Update)), + Create: make([]T, 0, len(a.Create)+len(d.Create)), + } + + out.Delete = append(out.Delete, a.Delete...) + out.Delete = append(out.Delete, d.Delete...) + + out.Update = append(out.Update, a.Update...) + out.Update = append(out.Update, d.Update...) + + out.Create = append(out.Create, a.Create...) + out.Create = append(out.Create, d.Create...) + + return out +} + +func (d *Diff[T]) IsEmpty() bool { + return len(d.Delete) == 0 && len(d.Update) == 0 && len(d.Create) == 0 +} + +func Union[T Entity](diffs ...Diff[T]) Diff[T] { + out := Diff[T]{ + Create: []T{}, + Delete: []T{}, + Update: []DiffUpdate[T]{}, + } + + for _, diff := range diffs { + out.Create = append(out.Create, diff.Create...) + out.Delete = append(out.Delete, diff.Delete...) + out.Update = append(out.Update, diff.Update...) + } + + return out +} + +// diffByID compares the expected state with the db state by ID. +// It returns the UpdateCandidates as it does not compare entities. This call should be used for entities with child entities. +// +// If the entity does not have a child, please use DiffByIDEqualer instead. +func diffByID[T Entity](expectedState, dbState []T) speculativeDiff[T] { + diff := speculativeDiff[T]{} + + dbStateByID := lo.SliceToMap(dbState, func(item T) (string, T) { + return item.GetID(), item + }) + + for _, expected := range expectedState { + if expected.GetID() == "" { + // If the expected state has no id, we cannot correlate it with the db state + if expected.IsDeleted() { + // If the expected state is deleted, we can skip it + continue + } + + // If the expected state is not deleted, we need to create it + diff.Create = append(diff.Create, expected) + continue + } + + dbState, ok := dbStateByID[expected.GetID()] + if !ok { + if expected.IsDeleted() { + // If the expected state is deleted, but we don't have it in the db, we can skip it + continue + } + + // If the expected state is not deleted, but we don't have it in the db, we need to create it + diff.Create = append(diff.Create, expected) + continue + } + + if expected.IsDeleted() { + if !dbState.IsDeleted() { + // If the expected state is deleted, but we have it in the db, we need to delete it + diff.Delete = append(diff.Delete, dbState) + continue + } + + // If the expected state is deleted, and we have it in the db, but it's deleted, we can skip it + continue + } + + diff.UpdateCandidates = append(diff.UpdateCandidates, DiffUpdate[T]{ + DBState: dbState, + ExpectedState: expected, + }) + } + + // Let's collect expected items with an ID so that we can check if they would require deletion + expectedItemsByID := lo.SliceToMap( + lo.Filter(expectedState, func(item T, _ int) bool { + return item.GetID() != "" + }), + func(item T) (string, T) { + return item.GetID(), item + }, + ) + + for dbID, dbItemState := range dbStateByID { + // If the expected state does not contain the item we need to delete it + if _, ok := expectedItemsByID[dbID]; !ok { + diff.Delete = append(diff.Delete, dbItemState) + } + } + + return diff +} + +type DiffByIDInput[T Entity] struct { + DBState []T + ExpectedState []T + + HandleDelete func(item T) error + HandleCreate func(item T) error + HandleUpdate func(item DiffUpdate[T]) error +} + +// DiffByID compares the expected state with the db state by ID. +// +// The callback functions are used to allow for custom handling of the diff entries. +// +// The call does not compare the entities themselves, it only compares the IDs. Can be used for +// entities that have child entities. +func DiffByID[T Entity](input DiffByIDInput[T]) error { + diff := diffByID(input.ExpectedState, input.DBState) + + var errs []error + for _, delete := range diff.Delete { + if input.HandleDelete != nil { + if err := input.HandleDelete(delete); err != nil { + errs = append(errs, err) + } + } + } + + for _, expected := range diff.Create { + if input.HandleCreate != nil { + if err := input.HandleCreate(expected); err != nil { + errs = append(errs, err) + } + } + } + + for _, update := range diff.UpdateCandidates { + if input.HandleUpdate != nil { + if err := input.HandleUpdate(update); err != nil { + errs = append(errs, err) + } + } + } + + return errors.Join(errs...) +} + +type EqualerEntity[T any] interface { + Entity + equal.Equaler[T] +} + +// DiffByIDEqualer compares the expected state with the db state by ID. +// +// This call uses the Equal method of the entity to compare the expected state with the db state in +// case of updates. +// +// Should be used for entities that do not have any child entities. +func DiffByIDEqualer[T EqualerEntity[T]](expectedState, dbState []T) Diff[T] { + diff := diffByID(expectedState, dbState) + + out := Diff[T]{ + Create: diff.Create, + Delete: diff.Delete, + Update: make([]DiffUpdate[T], 0, len(diff.UpdateCandidates)), + } + + for _, update := range diff.UpdateCandidates { + if !update.DBState.Equal(update.ExpectedState) { + out.Update = append(out.Update, update) + } + } + + return out +} diff --git a/pkg/entitydiff/parent.go b/pkg/entitydiff/parent.go new file mode 100644 index 0000000000..dab547763a --- /dev/null +++ b/pkg/entitydiff/parent.go @@ -0,0 +1,42 @@ +package entitydiff + +import "github.com/samber/lo" + +type WithParent[T Entity, P Entity] struct { + Entity T + Parent P +} + +func (w WithParent[T, P]) GetID() string { + return w.Entity.GetID() +} + +func (w WithParent[T, P]) IsDeleted() bool { + return w.Entity.IsDeleted() +} + +type EqualerWithParent[T EqualerEntity[T], P Entity] struct { + Entity T + Parent P +} + +func (w EqualerWithParent[T, P]) GetID() string { + return w.Entity.GetID() +} + +func (w EqualerWithParent[T, P]) IsDeleted() bool { + return w.Entity.IsDeleted() +} + +func (w EqualerWithParent[T, P]) Equal(other EqualerWithParent[T, P]) bool { + return w.Entity.Equal(other.Entity) +} + +func NewEqualersWithParent[T EqualerEntity[T], P Entity](entity []T, parent P) []EqualerWithParent[T, P] { + return lo.Map(entity, func(item T, _ int) EqualerWithParent[T, P] { + return EqualerWithParent[T, P]{ + Entity: item, + Parent: parent, + } + }) +}