Fatti

La ricorrente ha concluso con la convenuta un'assicurazione complementare per i rischi di decesso o invalidità per incidente. Il 20 giugno 1993, la ricorrente è stata vittima di un incidente in Spagna come passeggera del veicolo guidato dal suo amico. In vista dei negoziati sul grado di invalidità e sull'indennità assicurativa da versare, la convenuta ha incaricato il Prof. B., medico specialista in chirurgia, di esaminare la ricorrente. Sulla base di questa relazione peritale, le parti hanno concluso il 28 ottobre 1996 una convenzione di indennizzo che prevedeva il pagamento di CHF 196'000.- per un grado di invalidità del 37%. Successivamente, la ricorrente si è sottoposta a un nuovo esame e ha prodotto nuove relazioni mediche che concludono per un grado di invalidità tra l'88,5% e il 92%. Pertanto, ha chiesto che la convenzione di indennizzo sia dichiarata nulla per errore sui motivi e che la convenuta sia condannata a pagarle CHF 584'000.- (differenza tra CHF 780'000.- e i CHF 196'000.- già versati).

Legge

Una convenzione di indennizzo non può essere invalidata quando l'errore riguarda un punto che era contestato e doveva essere regolato transattivamente (caput controversum). Se, basandosi su una perizia, le parti hanno tenuto conto di un fatto errato, può esserci un errore essenziale. È possibile una parziale invalidazione del contratto se il suo contenuto è soggettivamente e oggettivamente divisibile, in modo che la parte residua costituisca di per sé un contratto con un senso.

Nel caso di specie, le parti hanno considerato le constatazioni della relazione peritale B. (in relazione alla tabella di indennizzo delle condizioni generali di…